具有搜索功能的ListView不是预期的行为

时间:2012-11-28 20:58:18

标签: android listview search

我有一个ListView填充了ArrayAdapter的数据,我已经实现了搜索功能,因为列表很长。

假设我有这个清单:

0 - 橙色 1 - 苹果 2 - 西红柿 3 - 鳄鱼皮 4 - 火车 5 - 乌龟 6 - 狗 7 - 猫

好的,现在在我用来过滤此列表的EditText中,我写了一个t。然后,列表将是:

0 - 西红柿 1 - 火车 2 - 乌龟

问题是我已经实现了onItemClickListener以便我可以根据项目访问某个页面或另一个页面,当我点击第一个页面(0 - tometoe)时,它会选择(0 )没有过滤的列表的第一个元素(0 - 橙色),当我点击第二个(1 - 火车)时,它选择列表的第一个元素的(1)而不过滤(1 - 苹果)和等......

这是我正在使用的代码:

ListView lv = new ListView(this);
        final String[] tricks;

        final ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.listviewcustom, tricks);

        lv.setAdapter(adapter);

        lv.setOnItemClickListener(new OnItemClickListener() {
            public void onItemClick(android.widget.AdapterView<?> arg0, View arg1, int arg2, long arg3) {
                showTrick(arg2, tricks[arg2], modality);
                //Log.e("itemClickListener", String.valueOf("LISTVIEWJ     " + arg2 + " - " + tricks[arg2] + " - " + modality));
            }
        });

        searchBox.addTextChangedListener(new TextWatcher() {

            public void onTextChanged(CharSequence cs, int arg1, int arg2, int arg3) {
                adapter.getFilter().filter(cs);
            }

            public void beforeTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) { }

            public void afterTextChanged(Editable arg0) { }
        });

        tricksLayout.addView(lv, LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);

所以我的问题是:我怎样才能让它按照我的意愿运作?

非常感谢你!

1 个答案:

答案 0 :(得分:1)

我没有完全理解你的问题。以下是我从您的问题中理解的答案,如果不是您要求发表评论,我将编辑我的答案。

制作一个ArrayList并填充它。

ArrayList<String> list = new ArrayList<String>();

list.add("orange"); //1
list.add("apple"); //2
list.add("tomatoe"); //3
list.add("alligator"); //4
list.add("train"); //5

在过滤器上,您可以获得这样的列表视图 0 - 西红柿1 - 火车2 - 乌龟

现在点击位置1时onItemClickListener

String temp =  here you get "train" at index 1 
//temp = "train"

int i = termsList.indexOf("train"); 
// it will give you actual position of train which is 5

EDITED

还可以使用notifyDataSetChanged正确更新列表。