android - ListView 过滤器 - 退格过滤(删除)

标签 android listview

我有工作 ListView 过滤。这是我的需求:

  • 当我没有结果时,我会显示空 View 。
  • 当我的搜索为空时 - ListView 获取所有项目。
  • 当我开始输入 ListView 时过滤效果很好。

问题是当我从搜索中逐字删除时我没有过滤,因为我用结果填充了我原来的 ListView。这里的问题很明显。但是当我删除单词时不知道如何解决它我的原始 ListView 被过滤和显示。

这是发布结果的方法:

protected void publishResults(CharSequence constraint, FilterResults results) {
                if (constraint.length()>0 &&results.count == 0) {
                    _1History =(ArrayList<HistoryModel>) results.values;
                    notifyDataSetChanged();
                } else if(constraint.length()==0){
                    _1History = _1HistoryOriginalData;
                    notifyDataSetChanged();
                } else {
                    _1History = (ArrayList<HistoryModel>) results.values;
                    notifyDataSetChanged();
                }
            }

最佳答案

该帖子不是最新的,但它确实出现在谷歌搜索中,所以我会尝试一下。

我假设您遇到的问题是在您按下退格键后过滤结果不会更新?由于只显示了 publishResults 方法,所以我无法真正看出问题的根源,因此我只是假设。

当您开始在搜索字段中键入内容时,_1History 数组开始过滤,在每个字符后缩短数组的大小。

 _1History =(ArrayList<HistoryModel>) results.values;

意味着每个连续的搜索查询(添加或删除字符)将仅在已过滤的 _1History 数组中搜索。

问题及其解决方案在 performFiltering 方法中。问题是您有一个循环来搜索 _1History 数组中的每个项目,并从该数组中删除不包含约束的所有对象。这样做的唯一好处是,在缩短 _1History 数组后循环访问的次数减少了,我想这在性能方面可能是有益的。

相反,您应该搜索包含所有对象的 _1HistoryOriginalData 数组,而不仅仅是最近过滤的对象。

或者,如果您希望在每次方法调用后继续过滤 _1History 并删除对象以最小化循环。您可以在 performFiltering 方法的顶部添加一段代码,检查字符是否已被删除,然后才重置 _1History 以拥有所有对象。这可能需要一个全局变量。这是您如何执行此操作的示例:

if(previousLength > constraint.length()){
       _1History.clear();
       _1History.addAll(_1HistoryOriginalData);
       previousLength = constraint.length();
}else{
       previousLength = constraint.length();
}

previousLength 是一个全局变量。

关于android - ListView 过滤器 - 退格过滤(删除),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35117948/

相关文章:

c# - 虚拟模式下的闪烁 ListView

android - onItemClick 得到错误的项目

android - 更新 Maven 存储库索引

java - 如何使用listview.GetItemAtPosition(e.Position)获取用户点击的ListView项的数据?

android - 复合布局是否总是需要自己的类?

java - ListViewAdapter extends CursorAdapter 滚动时顺序困惑

java - 如何更改 ListView 项的文本颜色?

Android - findViewById() - 将参数传递给构造函数

Android - Listview with viewholder 在按下时更改所选行的背景

java - Android:异步填充后从数据库加载 ListView