使用预定义的过滤器过滤 android ListView

2024-01-19

我想为 ListView 实现预定义的过滤器。我的 ListView 将包含数字,并且会有一个过滤器图标,单击该图标应显示“显示奇数”、“显示偶数”和“显示全部”等选项。

如何在单击“过滤器”图标时显示弹出对话框?如果这是使用简单的弹出对话框实现的,那么如何使用所选选项过滤 ListView?我尝试搜索 Android 论坛,但他们主要谈论文本过滤器。


你可以实施一个Filter https://developer.android.com/reference/android/widget/Filter.html像这样:

class MyFilter extends Filter {

    private final MyAdapter myAdapter;

    public MyFilter(MyAdapter myAdapter) {
        this.myAdapter = myAdapter;
    }

    @Override
    protected Filter.FilterResults performFiltering(CharSequence constraint) {
        FilterResults results = new FilterResults();
        if (constraint == null || constraint.length() == 0) {
    // unfiltered: show all
            results.values = myAdapter.getOriginalList();
            results.count = myAdapter.getOriginalList().size();
        } else {
    // filtered
            List<Integer> newWorkingList = new ArrayList<>();
            if (constraint.equals('1')) {
    // odd
                for (Integer integer : myAdapter.getOriginalList()) {
                    if (integer % 2 == 1) {
                            newWorkingList.add(integer);
                    }
                }
            } else if (constraint.equals('2')) {
    // even
                for (Integer integer : myAdapter.getOriginalList()) {
                    if (integer % 2 == 0) {
                        newWorkingList.add(integer);
                    }
                }
            }
            results.values = newWorkingList;
            results.count = newWorkingList.size();
        }
        return results;
    }

    @Override
    protected void publishResults(CharSequence constraint, FilterResults results) {
        myAdapter.setFilteredList((List<String>) results.values);
        if (results.count == 0) {
            myAdapter.notifyDataSetInvalidated();
        } else {
            myAdapter.notifyDataSetChanged();
        }
    }
}

在您的适配器类中,您必须进行类似于以下的更改:

public class MyAdapter extends ArrayAdapter<Integer> implements Filterable

    private MyFilter MyFilter;

    @Override
    public Filter getFilter() {
        if (myFilter == null) {
            myFilter = new myFilter(this);
        }
        return myFilter;
    }

并且您必须为原始列表添加一个设置器。

最后,在弹出对话框的侦听器中,您必须根据用户的选择添加这些行:

myAdapter.getFilter().filter(null);
myAdapter.getFilter().filter('1');
myAdapter.getFilter().filter('2');
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用预定义的过滤器过滤 android ListView 的相关文章

  • 从主题获取 EditText 的“默认”颜色值

    我有一个Activity其中包含一个EditText关于 3 1 根据用户输入 我更改 EditText 中文本的颜色 红色表示错误 然后在文本正常时将其重置为黑色 其中一个问题涉及改变活动的整体主题 例如 将其从浅色主题更改为常规深色主题
  • FireStore 日期查询未按预期工作

    我有一个有日期对象的文档 初始化 Firestore 的代码 FirebaseFirestore fireStore FirebaseFirestore getInstance FirebaseFirestoreSettings setti
  • 序列化 ArrayList

    我正在尝试编写一个 Android 游戏 即使用户想要返回主菜单或者活动被系统终止 我也希望能够暂停游戏 onSaveInstanceState 似乎并没有给我很大的控制权来决定何时可以读回捆绑包 而且据我所知 捆绑包仅在短时间内有效 所以
  • MissingDimensionStrategy 无处不在 - 有没有更好的方法?

    我有一个图书馆项目 让我们称之为lib1有定制的flavorDimensions指定的 更准确地说有buld尺寸与实际口味full and production 该库被另一个库项目使用 lib2 没有自定义flavorDimensions指
  • 在 flutter 应用程序中添加启动屏幕的正确方法是什么?

    我正在开发一个基于 flutter 的应用程序 并研究了几种添加闪屏的方法 但我不确定哪一个是最好实现的 import dart async import package flutter material dart import packa
  • 即使具有用户权限,也无法在外部存储上保存文件 [Android]

    我正在 Android 上开发一个用于图像处理的应用程序 但我一直在编写图像保存代码 这是我使用的方法 private void saveImageToExternalStorage Bitmap finalBitmap String ro
  • 如何在Android中创建类似架子的视图?

    如何在android中创建一个类似书架的视图 在任意行中显示多本书 此外 它应该具有像 Moon reader 应用程序那样的水平和垂直功能 我可以编写一个水平移动的架子视图 但它不能完全工作 我使用 xml 文件来查看包含图像 文本和按钮
  • 如何在Android中以编程方式替换视图? [复制]

    这个问题在这里已经有答案了 我有一个复杂的视图 包含多个子视图 例如文本视图和图像视图 我想用另一个 派生的 图像视图替换其中一个图像视图 另一个支持在后台加载图像 如何用新的图像视图替换原始图像视图 我目前的解决方案只是复制粘贴整个 XM
  • 文本末尾有额外的换行符

    使用此方法设置文本后 我似乎得到了一些额外的换行符TextView message setText Html fromHtml message 我怎样才能删除这些 它们导致我的布局扭曲 因为它在输出中添加了两条额外的行 该字符串已通过以下方
  • 如何在 Android 中签署 AAR Artifacts?

    我目前正在开发一个 AAR android 库 我想用我自己的密钥对已发布的工件进行签名 以便我可以确定我是否发布了具有相同名称和功能的假 aar 注意事项1 我希望能够以编程方式检查我的库的真实性 即使是一个伪造的库 只是伪造了我的 aa
  • Android Fabric Crashlytics 崩溃,初始化时未找到资源

    我从 google play 控制台收到了这份报告 看起来 Fabric 在启动时崩溃了 因为某些用户出现了资源未找到的异常 java lang RuntimeException at android app ActivityThread
  • 将对象传递给活动

    我可以在第一个活动中初始化对象并在所有活动中初始化对象吗 public class Calc int x int y public Calc int x int y this x x this y y public int sum retu
  • 如何在没有片段的情况下使用导航抽屉?

    我正在尝试遵循这个tutorial https developer android com training implementing navigation nav drawer html关于如何创建导航抽屉 但我不想在用户从抽屉列表中选择
  • 如何在flutter app android中添加Startapp广告?

    我想用其他广告更改 AdMob 广告 一些个人问题 如何在flutter app android中添加Startapp广告 有什么方法可以将启动广告添加到我的 flutter 应用程序 android 中 StartApp 现已更名为 St
  • java.lang.IllegalStateException:FragmentManager 已被销毁

    活动中onResume我称之为 volley request 的方法 它获取项目列表 然后将它们加载到此活动内的 ListFragment 中 当我第一次进入活动时 一切正常 但当我重新进入活动时 ListFragment 为空 并且控制台
  • Android 中应用程序在后台运行时如何显示闪屏?

    我的应用程序有一个启动屏幕 无法避免它 因为这是出于品牌原因 我想屏蔽用户界面并在后台显示启动屏幕 就像银行应用程序那样 我应该覆盖 MainActivity 中视图的 onPause 和 onResume 吗 显现
  • 将 Spritekit 游戏转换为 Android?

    是否有任何新选项可以将 spritekit 游戏转换为 Android 游戏 似乎唯一的选择是用 Java 重新编码所有内容或使用 Cocos2D LibGDX 等 很不幸的是 不行 而且带有 Apportable 服务的跨平台 Sprit
  • Android Google 地图:在 2 个位置设置边界并以其中一个位置为中心

    我知道如何在两个位置设置边界 以便两个位置都以最大缩放显示 使用LatLngBounds 我知道如何以某个位置为中心 请问我该如何同时做这两件事 在 2 个位置设置边界AND将地图置于 2 个位置之一的中心 googleMap setCen
  • getApplicationDocumentsDirectory 在 flutter 桌面(Windows)上不起作用

    如何在 Windows 上的 flutter 桌面上保存和打开文件 getApplicationDocumentsDirectory 不适用于 Windows 应用程序的 flutter 桌面 Future
  • 更改 ActionMode 溢出图标

    有没有办法更改 ActionMode Overflow 图标而不更改 正常 ActionBar 的图标 我仍然需要弄清楚如何仅更改 ActionMode Actionbar 内部的溢出图标 因为我更改了默认操作栏中的溢出图标 该图标在 Ac

随机推荐

  • 从后台返回时 AVCaptureSession 失败

    我有一个相机预览窗口 90 的时间都运行良好 然而 有时 当返回我的应用程序时 如果它位于后台 预览将不会显示 这是我在视图加载时调用的代码 void startCamera session AVCaptureSession alloc i
  • SearchView getActionView 返回 null

    前几天还可以用 但是突然就停止了 我只想在某些片段可见时使用操作栏搜索小部件 现在我无法获得SearchView now getActionView总是返回 null 可搜索 xml
  • 使用 php 和 mysql 发送提醒电子邮件而不使用 cron-job?

    我刚刚制作了一个 php 脚本 它将在约会开始前 2 天向网站管理员发送电子邮件提醒 我本来打算自动化脚本来运行 cron 作业 却发现我托管的人 疯狂的域 似乎没有 Cron 作业 有没有办法在没有 cron jobs 的情况下做到这一点
  • 转置没有聚合的行和列

    我有以下数据集 Account Contact 1 324324324 1 674323234 2 833343432 2 433243443 3 787655455 4 754327545 4 455435435 5 543544355
  • 如何在此 Builder 实现中摆脱 instanceof

    The idea 我需要创建命令 命令可以配置参数 并非每个命令都可以接收相同的参数 所以有些必须被忽略 我有一个抽象类 Command 其中定义了一个 Builder 默认情况下 每个附加参数都会抛出 UnsupportedOperati
  • 在 pandas 中使用带有元组列的查询

    我有一个 pandas df 其中一列作为元组 我想用query使用元组的第一个条目对 df 进行子集化 最好的方法是什么 我在 pandas 23 3 Python 3 6 6 MWE import pandas as pd df pd
  • Gitlab-ci.yml 创建合并请求

    我在 DEV 分支中运行以下 gitlab ci yml 文件 目标也为 DEV 由于我无法将 TARGET 指向 MASTER 因此不会自动创建 MR 我想知道是否可以在 gitlab ci 脚本本身中创建合并请求 dev stage d
  • 拉力赛中的速度图[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我正在开展一个项目 从拉力赛中提取数据并创建速度图表 我了解要使用的 REST Web 服务 API 是缺陷 迭代 分层需求和迭代累积
  • 具有 IDisposable 的无限状态机

    假设我有一个无限状态机来生成随机 md5 哈希值 public static IEnumerable
  • 使用 MongoDB 生成的 _ids 作为“秘密数据”(例如,OAuth 令牌)

    是 MongoDB id字段足够随机 不可猜测来充当秘密数据 例如 如果我正在构建服务器端 OAuth 我可以使用 id 作为用户的 OAuth 令牌吗 我想这样做是因为它为数据库提供了清洁性和可索引性 例如 tokens id gt oa
  • IntentService 中未调用 OnHandleIntent()

    我知道这个问题以前曾被问过 但我已经浏览了所有我能找到的答案 但仍然无法解决问题 问题是当 BroadcastReceiver 启动时 不会调用 IntentService onHandleIntent 奇怪的是 构造函数确实运行了 正如我
  • 将计算出的键添加到集合中

    请考虑这个由男人和女人组成的数据集 我根据几个变量在第二个时刻进行过滤 type ls JsonProvider lt gt let dt ls GetSamples let dt2 dt gt Seq filter fun c gt c
  • 处理 django 查询中的外来字符

    我正在构建从 GeoNames com 导入的城市名称搜索 有些城市的名称中带有国际字符 例如 伊斯坦布尔 实际上是数据库中的 伊斯坦布尔 当人们搜索 伊斯坦布尔 时 伊斯坦布尔不会出现 有没有一种方法可以在搜索中添加过滤器或解码器来知道
  • javascript从对象数组中获取键名称

    from data ja 大阪市 en Osaka 我想要得到 ja and en 我尝试了几种方法 data map function i return i 它返回 数字数组 console log Object keys Object
  • Espresso - 如何将 typeText 切换为英语或其他语言输入模式

    我正在使用 Espresso 来实现我的应用程序的自动测试框架 但在我设计的一些测试用例中 我发现我的测试总是失败 根本原因并不在于我对功能实现代码的测试代码 根本原因是在android输入法模式下 有时候 在中文输入模式下 我输入的文字是
  • jQuery .load 回调函数中 textStatus 参数的所有可能值是什么?

    我正在利用 jQuery 的回调函数 load http api jquery com load 方法来运行某些代码 如果textStatus的参数 loadmethod 等于某个字符串 例如我有 jQuery myContainer lo
  • VSCode 中具有语义突出显示的语言服务器

    我想写一个语言服务器VSCode具有语义突出显示支持 我使用的语言有非常复杂的规则 所以我不想依赖标记器来区分标识符和关键字 我已经在以下地区提供语言服务VS Community 我在那里编写了自己的分类器 可以编写自己的分类器VSCode
  • 在 OCR(光学字符识别)之前,您推荐使用什么软件进行图像增强? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我们目前正在研究在提交 OCR 之前提高图像质量的方法 我们当前使用的 OCR 引擎是 Nuance v15 的 Scansoft API
  • 使用 python 的多处理池和映射函数测量进度

    我用于并行 csv 处理的以下代码 usr bin env python import csv from time import sleep from multiprocessing import Pool from multiproces
  • 使用预定义的过滤器过滤 android ListView

    我想为 ListView 实现预定义的过滤器 我的 ListView 将包含数字 并且会有一个过滤器图标 单击该图标应显示 显示奇数 显示偶数 和 显示全部 等选项 如何在单击 过滤器 图标时显示弹出对话框 如果这是使用简单的弹出对话框实现