我有一个由String数组填充的ListView。用户搜索edittext并从列表中进行过滤,但是当我在过滤后单击其中一个列表项时,不会返回所选项目,而是完全返回其他项目。这就是它出错的原因:
过滤代码:
et.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence cs, int start, int before, int count) {
adapter.getFilter().filter(cs);
}
@Override
public void afterTextChanged(Editable s) {
}
列出项目点击代码:
lv.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
String s = array[position];
intent.putExtra(s);
setResult(RESULT_OK, intent);
finish();
}
});
然后我会通过OnActivityResult读取字符串。问题是当过滤列表时,列表项会减少。选择其中一个项目时,将返回缩减列表的位置编号,而不是数组。这就是为什么返回的字符串实际上是根据数组而不是根据简化列表的字符串。我怎么能克服这个?
答案 0 :(得分:0)
问题很简单,当您过滤列表并单击您赢得的项目并未点击过滤项目时,因为在lv.setOnItemClickListener(new OnItemClickListener() {...}
中您传递的原始列表的position
不是已过滤的列表。< / p>
解决方法是从主列表中获取,而不是像这样:
String a = array[parent.getItemAtPosition(position)];
or
String a = array[adapter.getItem(position)];
or
String a = array[(String) parent.getAdapter().getItem(position)];