AutoCompleteTextView mit eigenem Adapter. OnItemClick löst nicht aus

P

Panikmeister

Neues Mitglied
0
Tagchen,

ich habe eine AutocompleteTextView mit nem Adapter, der mir Objekte ("Artikel") anzeigt. Das Filtern klappt soweit, nur wenn ich auf ein angezeigtes Item (zb. "Tomate") klicke, wird der OnItemClick nicht ausgelöst.

Des Weiteren dachte ich, dass das ausgewählte Item dann automatisch in das Textfeld der View geschrieben wird. Da passiert allerdings nichts.

Kein einziger der 3 Listener, die ich in der Activity an die AutoCompleteTextView hänge, wird ausgelöst...

Bin langsam echt ratlos..



Adapter:

Code:
public class ArtikelSearchAdapter extends BaseAdapter implements Filterable {

    private LayoutInflater inflater;
    private ArrayList<Artikel_Model> objects;
    private Context context;
    private Filter filter;
    public Artikel_Model chosenArtikel = null;

    public ArtikelSearchAdapter(Context context, ArrayList<Artikel_Model> objects) {
        inflater = LayoutInflater.from(context);
        this.objects = objects;
        this.context = context;
        this.filter = new MyFilter(this.objects, this);
    }

    public int getCount() {
        return objects.size();
    }

    public Artikel_Model getItem(int position) {
        return objects.get(position);
    }

    public long getItemId(int position) {
        return position;
    }

    public View getView(final int position, View convertView, final ViewGroup parent) {
        convertView = inflater.inflate(R.layout.searchview_adapter, null);

        TextView tvName = (TextView) convertView.findViewById(R.id.searchview_tvName);
        ImageButton ibAdd = (ImageButton) convertView.findViewById(R.id.searchview_ibAdd);

        tvName.setText(getItem(position).getName());/*
        tvName.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {


            }
        });

        ibAdd.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

            }
        });
*/
        return convertView;
    }



    @Override
    public Filter getFilter() {
        return this.filter;
    }


    private class MyFilter extends Filter {

        public ArrayList<Artikel_Model> originalData;

        public ArtikelSearchAdapter SAdapter;

        public MyFilter(ArrayList<Artikel_Model> orgData, ArtikelSearchAdapter adap) {
            this.originalData = orgData;
            this.SAdapter = adap;
        }

        @Override
        protected FilterResults performFiltering(CharSequence constraint) {
            FilterResults oreturn = new FilterResults();
            if (constraint == null || constraint.length() == 0)
            {
                oreturn.values = this.originalData;
                oreturn.count = this.originalData.size();
            }
            else
            {
                //String[] actualResults = new String[this.originalData.size()];
                List<Artikel_Model> actualResults = new ArrayList<Artikel_Model>();
                //int i=0;
                for(int i = 0; i < this.originalData.size(); i++)
                {
                    if(this.originalData.get(i).getName().toUpperCase().startsWith(constraint.toString().toUpperCase())){
                        actualResults.add(this.originalData.get(i));
                        //i++;
                    }
                }
                oreturn.values = actualResults;
                oreturn.count = actualResults.size();
            }

            return oreturn;
        }

        @Override
        protected void publishResults(CharSequence constraint, FilterResults results) {
            if (results.count == 0)
                this.SAdapter.notifyDataSetInvalidated();
            else
            {
                SAdapter.objects = (ArrayList<Artikel_Model>)results.values;
                SAdapter.notifyDataSetChanged();
            }
        }
    }

}

Adapter-Layout

Code:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content">

<TextView
    android:id="@+id/searchview_tvName"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginTop="5dp"
    android:layout_marginBottom="5dp"
    android:layout_marginLeft="5dp"
    android:layout_marginRight="15dp"
    android:textAppearance="?android:attr/textAppearanceSmall"
    android:textColor="@android:color/black"
    android:fontFamily="sans-serif-thin" >
</TextView>

<ImageButton
    android:layout_width="25dp"
    android:layout_height="25dp"
    android:layout_alignParentRight="true"
    android:paddingBottom="5dp"
    android:paddingTop="5dp"
    android:background="@drawable/ic_action_new_white"
    android:id = "@+id/searchview_ibAdd"/>

</RelativeLayout>

Activity

Code:
this.searchView.setThreshold(1);

ArrayAdapter<Artikel_Model>(this.context,  android.R.layout.simple_dropdown_item_1line, new  Datasource(this.context).getArtikelCacheAsList());
        this.searchAdapter = new ArtikelSearchAdapter(this, new Datasource(this.context).getArtikelCacheAsList());
        this.searchView.setAdapter(this.searchAdapter);



        this.searchView.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                Artikel_Model selectedArtikel = searchAdapter.getItem(position);
                searchView.setListSelection(position);
                Toast.makeText(context, "Bitte Artikel auswählen.", Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onNothingSelected(AdapterView<?> parent) {
                Toast.makeText(context, "Bitte Artikel auswählen.", Toast.LENGTH_SHORT).show();
            }
        });

        this.searchView.setOnItemClickListener(new AdapterView.OnItemClickListener() {  //WARUM GEHT DER FUCK NICH???


            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                //unterscheiden ob view das +Button oder der Name ist
                Artikel_Model selectedArtikel = searchAdapter.getItem(position);
                searchView.setListSelection(position);
                Toast.makeText(context, "Bitte Artikel auswählen.", Toast.LENGTH_SHORT).show();
            }
        });
 

Ähnliche Themen

R
  • RudolfHagen
Antworten
1
Aufrufe
650
koje71
koje71
FabianDev
Antworten
5
Aufrufe
549
swa00
swa00
R
  • Robby1950
2
Antworten
23
Aufrufe
1.007
Robby1950
R
Zurück
Oben Unten