【发布时间】:2014-11-10 19:41:29
【问题描述】:
我正在尝试创建一个具有 editText 的 listView,当您键入内容时,它会将所有内容过滤到包含用户键入的文本的名称中,然后按下它以显示有关此名称的更多信息。过滤器工作正常,但在 onItemClickListener 中,每个案例都是由它的数字定义的:
case 0:
....
break;
case 1:
....
break;
case 2:
....
break;
当用户输入某些内容并且名称被过滤时,例如案例 45 将变为案例 0,它将打开案例 0 而不是案例 45 的信息,那么我如何才能为他们设置一个固定的名称,就像在输入按钮 id 时的 onClick 方法。
谢谢
我的代码:
final EditText inputSearch = (EditText) view.findViewById(R.id.inputSearch);
list = (GridView) view.findViewById(R.id.gv);
final ArrayAdapter<String> dataAdapter=new ArrayAdapter<String>(getActivity().getBaseContext(),R.layout.gridview_design,R.id.name, heartlessNames);
list.setAdapter(dataAdapter);
inputSearch.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s,int start,int before,int count){
updateText();
}
@Override public void beforeTextChanged(CharSequence s,int start,int count,int after){
updateText();
}
@Override public void afterTextChanged(Editable s){
updateText();
}
private void updateText(){
dataAdapter.getFilter().filter(inputSearch.getText().toString());
}
});
list.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View v,
int position, long id) {
switch(position){
case 0:
sp.play(soundId, 1, 1, 0, 0, 1);
startActivity(new Intent(getActivity().getBaseContext(), shadow.class));
getActivity().overridePendingTransition(R.animator.push_left_in, R.animator.push_left_out);
break;
case 1:
sp.play(soundId, 1, 1, 0, 0, 1);
startActivity(new Intent(getActivity().getBaseContext(), soldier_kh2fm.class));
getActivity().overridePendingTransition(R.animator.push_left_in, R.animator.push_left_out);
break;
}
}
});
return view;
}
}
【问题讨论】:
-
这并不是真正应该如何使用 onItemClicked。您应该将 onItemClicked 与您的适配器一起使用以获取该位置的项目并以这种方式使用它的数据。
-
@zgc7009 好的,但是如何在适配器中设置?
-
我对这个问题有点困惑,但知道您可能应该使用适配器 getItem(int position) 方法来处理它。所以你正在搜索和过滤你的列表?当您过滤时,您的列表会适当更新吗?如果是这样,您的列表/适配器此时应该可以使用了。
-
@zgc7009 你能告诉我如何使用getItem(int position)方法
-
getItem(int position) 将返回该位置的列表视图中表示的项目。如果您使用 getItem(0) 它将返回列表中的第一项
标签: java android android-listview onitemclicklistener