我有一个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);
所以我的问题是:我怎样才能让它按照我的意愿运作?
非常感谢你!
答案 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
正确更新列表。