Android Custom ArrayAdapter не обновляется после фильтра

Итак, у меня есть пользовательский 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

    }

};
5
задан M Jesse 7 August 2012 в 06:22
поделиться