So habe ich eine benutzerdefinierte ArrayAdapter
so kann ich den Titel/Untertitel Ansicht verwenden, die auf dem ListView
zur Verfügung steht. Ich habe eine EditText
, die einen String und filtert den Adapter übernimmt.Android Individuelle ArrayAdapter nicht aktualisiert, nachdem Filter
Der Filter im Sinne wirkt, dass es die richtigen Objekte filtert (ich kann es durch Klicken sagen, und es beginnt die Absicht mit den richtigen „Extras“).
Jedoch obwohl die Filter Werke, die Elemente im Adapter werden nicht aktualisiert, um die korrekten Informationen anzuzeigen ... Der Titel und der Untertitel sind falsch.
Sagen wir, wir haben Artikel 0 bis 9 auf der ListView
, ich filter auf 3 Elemente mit einer Suche und lässt sagen, die gefilterten Elemente sind 5, 6, 9 ... 3 Elemente angezeigt werden, aber es ist die erste 3 Elemente der ursprünglich vorge Suche ListView
(0-2). Wenn ich auf den Punkt 2 (der dritte Punkt) klicke, sind die Inhalte von 9 in der neuen Absicht enthalten. Dies ist korrekt für die Suchkriterien, der Titel hat jedoch die richtige Information wiedergegeben.
Ich bin nicht sicher, was ich die ListView
auffrischen zu sagen brauchen. Ich glaube nicht, dass es notifyDataSetChanged();
Jede Hilfe wird geschätzt. Danke!
public class myListAdapter extends ArrayAdapter<Pizza>{
private ArrayList<Pizza> items;
private PizzaViewHolder myListHolder;
private class PizzaViewHolder{
TextView title;
TextView subtitle;
}
public myListAdapter(Context context, int textViewResourceId, ArrayList<Pizza> items) {
super(context, textViewResourceId, items);
this.items = items;
// TODO Auto-generated constructor stub
}
@Override
public View getView(int pos, View convertView, ViewGroup parent){
View v = convertView;
if(v == null){
LayoutInflater vi = (LayoutInflater)getSystemService(LAYOUT_INFLATER_SERVICE);
v = vi.inflate(R.layout.myList_item, null);
myListHolder = new PizzaViewHolder();
myListHolder.title = (TextView)v.findViewById(R.id.title);
myListHolder.subtitle = (TextView)v.findViewById(R.id.subtitle);
v.setTag(myListHolder);
}else myListHolder = (PizzaViewHolder)v.getTag();
Pizza myList = items.get(pos);
if (myList != null){
myListHolder.title.setText(myList.getTitle());
myListHolder.subtitle.setText(myList.getSubTitle());
}
return v;
}
}
Dies ist die Suche
private TextWatcher filterTextWatcher = new TextWatcher(){
public void afterTextChanged(Editable s) {
// TODO Auto-generated method stub
if(!s.equals("")){
((Filterable) this.listView1.getAdapter()).getFilter().filter(s);
}
}
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
// TODO Auto-generated method stub
}
public void onTextChanged(CharSequence s, int start, int before,
int count) {
// TODO Auto-generated method stub
}
};
einen Standard-Adapter funktioniert gut, keine Notwendigkeit notifyDataSetChanged zu verwenden, meine benutzerdefinierte Adapter nicht aktualisiert –