ListView使用setTextFilterEnabled选择的位置

时间:2014-04-27 00:15:35

标签: android android-listview

我有以下代码,用100个选项启动listview。此外,它还可以激活软件键盘,以便于搜索选项。如果我选择一个选项,则所选选项的位置存储在字符串数组items []中。问题是,当我按关键字搜索选项时,选择它然后返回,它指向当前位置而不是当前值。

如何防止这种情况?

public class MyListActivity extends ListActivity {
    String[] items;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.list);
        ListView lView = getListView();
        lView.setChoiceMode(2); 
        getWindow().setSoftInputMode(
                   WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
        lView.setTextFilterEnabled(true);
        items = getResources().getStringArray(R.array.items1);
        setListAdapter(new ArrayAdapter<String>(this,
                 android.R.layout.simple_list_item_checked, items));
     }
       public void onListItemClick(ListView lv, View v, int position, long id) {
           lv.setItemChecked(position, lv.isItemChecked(position));
           String selectedValue = (String) getListAdapter().getItem(position);
           Toast.makeText(this, selectedValue, Toast.LENGTH_SHORT).show();
       }
}

2 个答案:

答案 0 :(得分:0)

我认为您应该创建自己的自定义适配器,然后在该适配器中只需覆盖getItem(int position)函数即可返回所需的值。如果您之前没有这样做,请查看例如this tutorial

答案 1 :(得分:0)

事实证明,拥有可过滤的适配器并不适用于任何选择模式(单个或多个)。解决此问题的唯一方法是手动维护所选项目的状态(在您的情况下为一组或一个字符串列表),然后在每次更改过滤器时简单地循环它,以便选择所需的项目。这里已经详细描述了这一点:Multiple Choice Searchable ListView

你显然不能使用setTextFilterEnabled()方法,你只需要在你的布局中添加一个EditText,然后在其上设置一个TextWatcher,以获得所有必要的回调。