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:
Adapter-Layout
Activity
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();
}
});