Quindi ho personalizzato ArrayAdapter
in modo da poter utilizzare la vista Titolo/sottotitolo disponibile su ListView
. Ho un EditText
che accetta una stringa e filtra l'adattatore.ArrayAdapter personalizzato di Android non si aggiorna dopo il filtro
Il filtro lavora nel senso che è filtrando gli oggetti corretti (posso dire facendo clic su di esso e inizia l'intento con gli "extra" correct.)
Tuttavia, anche se i lavori di filtraggio, il gli elementi nell'adattatore non vengono aggiornati per visualizzare le informazioni corrette ... Il titolo e il sottotitolo non sono corretti.
Diciamo che abbiamo articoli da 0 a 9 su ListView
, filtro a 3 elementi con una ricerca e diciamo che gli elementi filtrati sono 5, 6, 9 ... 3 elementi sono visualizzati, ma sono i primi 3 articoli della ricerca preliminare originale ListView
(0-2). Se clicco sull'elemento 2 (il terzo elemento), il contenuto di 9 è contenuto nel nuovo intento. Questo è corretto per i criteri di ricerca, tuttavia il titolo riflette le informazioni corrette.
Non sono sicuro di cosa devo comunicare allo ListView
per l'aggiornamento. Non penso che sia notifyDataSetChanged();
Qualsiasi aiuto è apprezzato. Grazie!
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;
}
}
Questa è la ricerca
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
}
};
Utilizzando un adattatore standard funziona bene, non è necessario utilizzare notifyDataSetChanged, la mia scheda personalizzata non aggiorna –