我有以下代码,用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();
}
}
答案 0 :(得分:0)
我认为您应该创建自己的自定义适配器,然后在该适配器中只需覆盖getItem(int position)
函数即可返回所需的值。如果您之前没有这样做,请查看例如this tutorial
答案 1 :(得分:0)
事实证明,拥有可过滤的适配器并不适用于任何选择模式(单个或多个)。解决此问题的唯一方法是手动维护所选项目的状态(在您的情况下为一组或一个字符串列表),然后在每次更改过滤器时简单地循环它,以便选择所需的项目。这里已经详细描述了这一点:Multiple Choice Searchable ListView
你显然不能使用setTextFilterEnabled()方法,你只需要在你的布局中添加一个EditText,然后在其上设置一个TextWatcher,以获得所有必要的回调。