在字符串类型listview Android上实现searchview

时间:2017-01-05 10:31:54

标签: android listview searchview

我有一个items的列表,我希望在item的基础上开始不同的活动,当我点击它时会打开正确的活动,但是当我尝试从搜索视图栏搜索列表项时然后它会打开错误的活动。

    listView = (ListView) findViewById(R.id.listView);
    sv=(SearchView) findViewById(R.id.searchView1);
    String[] values = new String[]{item1,item2,item3,item4,}
    final ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
                android.R.layout.simple_list_item_2, android.R.id.text1, values);
    listView.setAdapter(adapter);
    //linking from 1 item to other activity stars with if options//
    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View view,
                                int position, long id) {
            if (position == 0) {
                Intent myIntent = new Intent(view.getContext(), activity1.class);
                startActivityForResult(myIntent,0);
            }

            if (position == 4) {
                Intent myIntent = new Intent(view.getContext(), aactivity4.class);
                startActivityForResult(myIntent,0);

            }
        }
    });

    sv.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
        @Override
        public boolean onQueryTextSubmit(String text) {
            // TODO Auto-generated method stub
            return false;
        }
        @Override
        public boolean onQueryTextChange(String text) {
            adapter.getFilter().filter(text);
            return false;
        }
    });

我对编码知之甚少,但任何人都可以解决我的问题。

1 个答案:

答案 0 :(得分:4)

您是在position的基础上开始活动的,但是当您进行搜索时position会被更改,因为列表会缩小,positions会更改,以便获取与之关联的数据列表中的指定位置使用getItemAtPosition

因此根据数据改变条件

 if (parent.getItemAtPosition(position).equals("item1")) {
                Intent myIntent = new Intent(view.getContext(), activity1.class);
                startActivityForResult(myIntent,0);
            }

else if (parent.getItemAtPosition(position).equals("item2")) { // use any item value here you want 
                Intent myIntent = new Intent(view.getContext(), aactivity4.class);
                startActivityForResult(myIntent,0);
            }

注意:您也可以使用switch代替长ifelse-if阶梯

例如你有三个字符串

item 1   position 0
item 2   position 1
item 3   position 2

搜索第2项后,您的列表中有两个靠近搜索的值

item 2   position 0
item 3   position 1

所以位置会发生变化,所以不要使用它而是使用数据

代码

       listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View view,
                                    int position, long id) {
                Intent intent = null;
                // global string to class
                selectedValue = String.valueOf(parent.getItemAtPosition(position));

                if (selectedValue.equals("item1")) {
                                        // ^^^  use any item value here you want
                    Intent myIntent = new Intent(view.getContext(), activity1.class);
                    startActivityForResult(myIntent,0);
                }

                else if (selectedValue.equals("item2")) {
                    Intent myIntent = new Intent(view.getContext(), aactivity4.class);
                    startActivityForResult(myIntent,0);
                }
            }
        });