Итак, у меня есть пользовательский ArrayAdapter
, поэтому я могу использовать представление Заголовок/Подзаголовок, которое доступно на ListView
. У меня есть EditText
, который принимает строку и фильтрует адаптер.
Фильтр работает в том смысле, что он фильтрует правильные объекты (, я могу сказать, щелкнув по нему, и он запускает намерение с правильными «дополнительными функциями».)
Однако, несмотря на то, что фильтрация работает, элементы в адаптере не обновляются для отображения правильной информации... Неправильные заголовок и подзаголовок.
Допустим, у нас есть элементы с 0 по 9 в ListView
, я фильтрую до 3 элементов с помощью поиска, и скажем, отфильтрованные элементы 5, 6, 9... отображаются 3 элемента, но это первые 3 элемента исходный предварительный -поискListView
(0 -2 ). Если я нажму на элемент 2 (третий элемент ), содержимое 9 содержится в новом намерении. Это правильно для критериев поиска, однако заголовок действительно отражал правильную информацию.
Я не уверен, что мне нужно сказать ListView
для обновления. Я не думаю,notifyDataSetChanged();
Любая помощь приветствуется. Спасибо!
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;
}
}
Это поиск
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
}
};