[英]Display list passed to listview and return id of selected item to previous activity
[英]ListView not returning selected item after filtering to previous activity
我有一个由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读取字符串。 问题在于,当过滤列表时,列表项会减少。 选择其中一项时,将返回精简列表的位置编号,而不是数组。 这就是为什么返回的字符串实际上是根据数组而不是根据简化列表的字符串。 我该如何克服呢?
当您过滤列表并单击项目时,问题很简单,您将无法单击过滤的项目,因为在lv.setOnItemClickListener(new OnItemClickListener() {...}
您传递的是原始列表的position
而不是过滤列表的位置。
解决方法是从主列表中获取而不是尝试像这样进行获取:
String a = array[parent.getItemAtPosition(position)];
or
String a = array[adapter.getItem(position)];
or
String a = array[(String) parent.getAdapter().getItem(position)];
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.