我正在过滤listview,它正常工作。但是当我点击过滤后的列表视图中的项目时,它会在原始位置给出项目的名称。
实施例: 项目:A,B,C,D,E。 如果我过滤C,它只返回1个项目(C),但它显示A,因为它是位置0。
我一直在寻找信息,但类似的问题都没有帮助我。
这是我的代码:
final FilteredListviewAdapter adapter = new FilteredListviewAdapter(AddAgentProfile.this, android.R.layout.simple_list_item_1, arraymls);
list.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
// TODO Auto-generated method stub
addProfile.setMLSId(mlslist.get(position).getId());
// THIS IS THE LINE THAT GIVES ME THE WRONG RESULT!!!
textmls.setText(mlslist.get(position).getName());
mls.setText("");
dialog.dismiss();
}
});
list.setAdapter(adapter);
final EditText filter = (EditText) inflated.findViewById(R.id.et_filter);
filter.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
// TODO Auto-generated method stub
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
// TODO Auto-generated method stub
}
@Override
public void afterTextChanged(Editable s) {
adapter.getFilter().filter(s);
adapter.notifyDataSetChanged();
}
});
和FIlteredListViewAdapter:
public class FilteredListviewAdapter extends ArrayAdapter<String> {
ArrayList<String> list;
public FilteredListviewAdapter(Context context, int layout, ArrayList<String> array) {
super(context, layout, array);
list = array;
}
@Override
public String getItem(int position) {
return super.getItem(position);
}
}
我做错了什么?
答案 0 :(得分:1)
我终于找到了解决方案。
我编写的适配器代码没问题。
我改变的唯一行是在OnItemClickListener中,所以现在代码是这样的:
final FilteredListviewAdapter adapter = new FilteredListviewAdapter(AddAgentProfile.this, android.R.layout.simple_list_item_1, arraymls);
list.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
// TODO Auto-generated method stub
addProfile.setMLSId(mlslist.get(arraymls.indexOf(adapter.getItem(position))).getId());
textmls.setText(adapter.getItem(position));
mls.setText("");
dialog.dismiss();
}
});
list.setAdapter(adapter);
现在我调用函数adapter.getItem而不是list.get
答案 1 :(得分:0)
getItem
应返回位于数据集内的项目:
@Override
public String getItem(int position) {
return list.get(position);
}