0

CustomListViewの実装から検索しようとしてFilterableBaseAdapterますが、繰り返し検索データが提供されます。

            @Override
    public Filter getFilter() {
        // TODO Auto-generated method stub
         // Here myList contains Original data
        return new MyFilter(myList);
    }

private class MyFilter extends Filter {

    List<ListModel> myValues;

    public MyFilter(List<ListModel> list) {
        // TODO Auto-generated constructor stub
        myValues = new ArrayList<ListModel>(list);
    }

    @Override
    protected FilterResults performFiltering(CharSequence constraint) {
        // TODO Auto-generated method stub

        FilterResults results = new FilterResults();

        List<ListModel> temp = new ArrayList<ListModel>();

        if (TextUtils.isEmpty(constraint)) {

            if (temp.size() > 0)
                temp.clear();
            temp.addAll(myValues);
        }

        else {
            for (ListModel model : myValues) {

                if (model.getNames().toLowerCase.contains(constraint.toString().toLowerCase()))
                    temp.add(model);
            }

        }
        results.values = temp;
        results.count = temp.size();

        return results;
    }

      @SuppressWarnings("unchecked")
      @Override
    protected void publishResults(CharSequence constraint,
            FilterResults results) {
        // TODO Auto-generated method stub

        if (results != null && results.count > 0) {

            myList.clear();
            myList.addAll((List<ListModel>) results.values);

        } else
            myList.addAll(myValues);

        mAdapter.notifyDataSetChanged();

    }
}

間違えた場所がわかりません。検索は完全に機能しますが、カスタムリストビューにデータが追加されます。

「インド」を検索すると、リストビューデータ全体が「インド」として追加されます。リストビューのサイズが10行の場合、「インド」で20行になります。

どんな助けでも感謝されるでしょう。

4

1 に答える 1

1

最後に、私は自分の質問を解決することができます。

これが私の問題を解決したいくつかのことです。

    @Override
    public Filter getFilter() {
        // TODO Auto-generated method stub

        return new MyFilter();
    }

    private class MyFilter extends Filter {

    @Override
    protected FilterResults performFiltering(CharSequence constraint) {
        // TODO Auto-generated method stub

        FilterResults results = new FilterResults();

        List<ListModel> temp = new ArrayList<ListModel>();

        if (TextUtils.isEmpty(constraint)) {

            if (temp.size() > 0)
                temp.clear();
            // I have created new List from old myList before search begins
            temp.addAll(newList);
        }
        else
        {
            // newList 
            for (ListModel model : newList)
            {
                if(model.getNames().toLowerCase.contains(constraint.toString().toLowerCase()))
                    temp.add(model);
            }

        }
        results.values = temp;
        results.count = temp.size();

        return results;
    }

    @SuppressWarnings("unchecked")
    @Override
    protected void publishResults(CharSequence constraint,
            FilterResults results) {
        // TODO Auto-generated method stub

              myList.clear();

        if (results != null && results.count > 0)         
            myList.addAll((List<ListModel>) results.values);
        else
            myList.addAll(myList);

        mAdapter.notifyDataSetChanged();

    }
} //updated code
于 2013-01-10T14:32:36.147 に答える