gpt4 book ai didi

ListView 中的 Android 搜索无法正常工作

转载 作者:行者123 更新时间:2023-11-29 16:06:14 25 4
gpt4 key购买 nike

我正在尝试将搜索功能添加到具有自定义适配器的 ListView。当我在 EditText 中输入内容时,它会搜索并正确显示结果,但如果我尝试删除我刚刚写的内容,它不会出现在初始列表中,它会保留在已经过滤的列表中。这是代码:

在 MainActivity 中:

private TextWatcher searchTextWatcher = new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
adapter.getFilter().filter(s.toString());
adapter.notifyDataSetChanged();
}

@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}

@Override
public void afterTextChanged(Editable s) {
}
};

在 LazyAdapter 中:

public Filter getFilter() {
return new Filter() {
@SuppressWarnings("unchecked")
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
data = (ArrayList<HashMap<String, String>>) results.values;
LazyAdapter.this.notifyDataSetChanged();
}

@Override
protected FilterResults performFiltering(CharSequence constraint) {
ArrayList<HashMap<String, String>> filteredResults = getFilteredResults(constraint);

FilterResults results = new FilterResults();
results.values = filteredResults;

return results;
}
};
}

protected ArrayList<HashMap<String, String>> getFilteredResults(
CharSequence constraint) {
ArrayList<HashMap<String, String>> filteredTeams = new ArrayList<HashMap<String, String>>();
for(int i=0;i< data.size();i++){
if(data.get(i).get(MainActivity.KEY_TITLE).toLowerCase().startsWith(constraint.toString().toLowerCase())){
filteredTeams.add(data.get(i));
}
}

return filteredTeams;
}

我的代码有什么问题?谢谢!

最佳答案

请注意,当您过滤时,您正在用过滤后的结果替换 ArrayList 中未过滤的结果。当您按下退格键删除字符时,您正在尝试根据已经过滤的列表进行过滤,这就是您的结果不会改变的原因。您将需要保留对未应用任何过滤器的原始数据集的引用,并始终使用它进行过滤,但永远不要更改/替换它。

关于ListView 中的 Android 搜索无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18109744/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com