Así que tengo un ArrayAdapter
personalizado así que puedo usar la vista Título/Subtítulo que está disponible en el ListView
. Tengo un EditText
que acepta una cadena y filtra el adaptador.Android Custom ArrayAdapter no se actualiza después del filtro
El filtro funciona en el sentido de que se está filtrando los objetos correctos (que puedo decir haciendo clic sobre ella y comienza la intención con los "extras" correctas.)
Sin embargo a pesar de que las obras de filtrado, el los elementos del adaptador no se actualizan para mostrar la información correcta ... El título y los subtítulos son incorrectos.
Digamos que tenemos los elementos del 0 al 9 en el ListView
, filtro a 3 elementos con una búsqueda, y digamos que los elementos filtrados son 5, 6, 9 ... Se muestran 3 elementos, pero son los 3 primeros elementos de la búsqueda previa original ListView
(0-2). Si hago clic en el ítem 2 (el tercer ítem), el contenido de 9 está contenido en el nuevo intento. Esto es correcto para los criterios de búsqueda, sin embargo, el título reflejó la información correcta.
No estoy seguro de lo que necesito decirle al ListView
para actualizar. No creo que sea notifyDataSetChanged();
Cualquier ayuda es apreciada. Gracias!
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;
}
}
Esta es la búsqueda
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
}
};
El uso de un adaptador estándar funciona bien, no es necesario utilizar notifyDataSetChanged, mi adaptador personalizado no actualiza –