Android ArrayAdapter 过滤问题

2023-12-30

因为我想使用自定义列表适配器,以便我可以设置列表样式,但过滤器功能不起作用。我可以进行基本过滤,但是一旦过滤结果列表少于我开始过滤时显示的 listItems 数量,应用程序就会崩溃。

这段代码中还有第二个问题,我不确定它是否相关,但是当clear();在publishResults中运行,然后应用程序也会崩溃。

这是我正在使用的代码。

package com.android.example;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.Filter;
import android.widget.TextView;

public class CustomListAdapter extends ArrayAdapter<String> {
    private Context mContext; 
private String[] items;
private String[] filtered;

public CustomListAdapter(Context context, int textViewResourceId, String[] items) {
        super(context, textViewResourceId, items);
        this.filtered = items;
        this.items = filtered;

        setNotifyOnChange(true);
        mContext = context;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
     View v = convertView;
     if (v == null) {
         LayoutInflater vi = (LayoutInflater)mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
         v = vi.inflate(R.layout.list_item, null);
     }
     String o = filtered[position];
     if (o != null) {
             TextView tt = (TextView) v.findViewById(R.id.tvViewRow);
             if (tt != null) {
                   tt.setText("Name: "+o);
             }
     }
     return v;
}

public void notifyDataSetInvalidated()
{
    super.notifyDataSetInvalidated();
}


private Filter filter;


public Filter getFilter()
{
    if(filter == null)
        filter = new NameFilter();
    return filter;
}
private class NameFilter extends Filter
{
    @Override
    protected FilterResults performFiltering(CharSequence constraint) {
        // NOTE: this function is *always* called from a background thread, and
        // not the UI thread.
        constraint = constraint.toString().toLowerCase();
        FilterResults result = new FilterResults();
        if(constraint != null && constraint.toString().length() > 0)
        {
            ArrayList<String> filt = new ArrayList<String>();
            List<String> lItems = new ArrayList<String>();
            synchronized (items)
            {     
                lItems = Arrays.asList(items);  
                //Collections.copy(lItems, Arrays.asList(items));
            }
            for(int i = 0, l = lItems.size(); i < l; i++)
            {
                String m = lItems.get(i);
                if(m.toLowerCase().startsWith(constraint.toString()))
                    filt.add(m);
            }
            result.count = filt.size();
            result.values = filt.toArray(new String[0]);
        }
        else
        {
            synchronized(items)
            {
                result.values = items;
                result.count = Arrays.asList(items).size();
            }
        }
        return result;
    }

    @Override
    protected void publishResults(CharSequence constraint, FilterResults results) {
        // NOTE: this function is *always* called from the UI thread.

            filtered = (String[])results.values;
            notifyDataSetChanged();
            clear();
            notifyDataSetInvalidated();
    }
}

}


我只是有同样的问题。只需将 getCount() 方法放入您的适配器类中即可。它应该返回过滤后的计数。像这样的东西:

public int getCount() {
    return mItems.size();  
}

我过滤 mItem。

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

Android ArrayAdapter 过滤问题 的相关文章

  • Android Studio 3.0 Canary 9 - 无法解析包

    我在 Android Studio 3 0 Canary 9 中遇到几个错误 这些错误是 无法解析 android 软件包 下面列出了一些错误 我刚刚安装了 SDK 的所有额外软件包 但仍然收到 gradle 构建错误 Error 82 1
  • android中向sqlite中插入大量数据

    目前 我必须一次向我的 Android 中插入超过 100 亿条数据 然而 内存不足的问题会使程序崩溃 sqlite 插入测试非常简单 只需使用 for 循环生成 sql 插入命令并通过 开始 和 提交 进行包装 private Array
  • 卸载后 Web 应用程序不显示“添加到主屏幕”

    这是我第一次创建网络应用程序 我设法解决了这个问题 所以我得到了实际的 chrome 提示 将其添加到主屏幕 然后我从手机上卸载了该网络应用程序 因为我想将其展示给我的同事 但是 屏幕上不再出现提示 问题 这是有意为之的行为还是我的应用程序
  • SearchView过滤ListView

    我已经实现了搜索视图来过滤我的列表视图项目 当我输入任何文本时 它会过滤列表 但当我退出搜索视图时 它不会返回原始列表项 public class PlacesListAdapter extends ArrayAdapter
  • CardView 圆角获得意想不到的白色

    When using rounded corner in CardView shows a white border in rounded area which is mostly visible in dark environment F
  • 如何在android中获取Camera2 API的当前曝光

    In android hardware Camera旧的 我使用下面的代码获取当前曝光并获取它Camera Camera Parameters param mCamera getParameters currentExposure para
  • android xamarin 中的 reCaptcha

    我想在 Xamarin android 应用程序中实现验证码 我抓住了这个在 Android 中集成 googles reCaptcha 验证 https www c sharpcorner com article how to integ
  • 计数物体和更好的填充孔的方法

    我是 OpenCV 新手 正在尝试计算物体的数量在图像中 我在使用 MATLAB 图像处理工具箱之前已经完成了此操作 并在 OpenCV Android 中也采用了相同的方法 第一步是将图像转换为灰度 然后对其进行阈值计算 然后计算斑点的数
  • 当文本输入聚焦在 React Native for Android 的底部工作表上时,视图移出屏幕

    我正在使用图书馆 https github com osdnk react native reanimated bottom sheet https github com osdnk react native reanimated bott
  • 在画布上绘图

    我正在编写一个 Android 应用程序 它可以在视图的 onDraw 事件上直接绘制到画布上 我正在绘制一些涉及单独绘制每个像素的东西 为此我使用类似的东西 for int x 0 x lt xMax x for int y 0 y lt
  • CollapsingToolBarLayout - 状态栏稀松布颜色不改变

    几天前我更新了我的 android studio 并开始使用 CoordinatorLayout 和 CollapsingToolbarLayout 只是尝试一些东西 工具栏稀松布颜色似乎覆盖了状态栏初始颜色和状态栏稀松布颜色 从 xml
  • 在 java 类和 android 活动之间传输时音频不清晰

    我有一个android活动 它连接到一个java类并以套接字的形式向它发送数据包 该类接收声音数据包并将它们扔到 PC 扬声器 该代码运行良好 但在 PC 扬声器中播放声音时会出现持续的抖动 中断 安卓活动 public class Sen
  • 是否必须删除 Intent extra?

    这可能是一个愚蠢的问题 但是是否有一条规则规定消费活动必须显式删除 Intent 额外内容 或者只有在回收 Intent 对象时才如此 换句话说 如果我总是通过执行以下操作来链接到下一个活动 Intent i new Intent MyCu
  • 带有 EditText 和 Spinner 的对话框

    我有一个按钮 单击后会弹出一个对话框 我希望对话框有一个EditText and a Spinner对话框内 我不知道如何设置它的视图 我有一个代码AlertDialog它有效 只是EditText and Spinner我需要将其放入其中
  • 尝试在 ubuntu 中编译 android 内核时出错

    我正在尝试从源代码编译 Android 内核 并且我已经下载了所有正确的软件包来执行此操作 但由于某种原因我收到此错误 arm linux androideabi gcc error unrecognized command line op
  • Android Studio - Windows 7 上的 Android SDK 问题

    我对 Google i o 2013 上发布的最新开发工具 Android Studio 有疑问 我已经成功安装了该程序并且能够正常启动 我可以导入现有项目并对其进行编辑 但是 当我尝试单击 SDK 管理器图标或 AVD 管理器图标时 或者
  • 我的设备突然没有显示在“Android 设备选择器”中

    我正在使用我的三星 Galaxy3 设备来测试过去两个月的应用程序 它运行良好 但从今天早上开始 当我将设备连接到系统时 它突然没有显示在 Android 设备选择器 窗口中 我检查过 USB 调试模式仅在我的设备中处于选中状态 谁能猜出问
  • Android 套接字和 asynctask

    我即将开始制作一个应该充当 tcp 聊天客户端的应用程序 我一直在阅读和阅读 我得出的结论是最好 如果不需要 将我的套接字和异步任务中的阅读器 问题是我不确定从哪里开始 因为我是 Android 新手 这至少对我来说是一项艰巨的任务 但据我
  • 如何确定对手机号码的呼叫是本地呼叫还是 STD 或 ISD

    我正在为 Android 开发某种应用程序 但不知道如何获取被叫号码是本地或 STD 的号码的数据 即手机号码检查器等应用程序从哪里获取数据 注意 我说的是手机号码 而不是固定电话 固定电话号码 你得到的数字是字符串类型 因此 您可以获取号
  • Firebase 添加新节点

    如何将这些节点放入用户节点中 并创建另一个节点来存储帖子 我的数据库参考 databaseReference child user getUid setValue userInformations 您需要使用以下代码 databaseRef

随机推荐

  • informatica powercenter 与自定义 Perl ETL 作业?

    我公司的大多数公司都使用 powercenter informatica 在数据库之间进行提取 转换 加载类型的数据移动作业 然而 我参与的项目有一个大型的自定义 Perl 作业 其中添加了一些 Java 以便很好地移动数据并触发一些其他更
  • Stacktrace 不打印在 Glassfish 4.1 集群日志中

    在 Glassfish 4 1 上进行第一个集群设置 应用程序 EAR 级别日志 例如打印堆栈跟踪 似乎无法到达 GF dir domains logs server log 或 GF dir nodes node name 中的服务器 实
  • 如何防止 MATLAB 中的填充命令创建没有“角”的框

    我目前正在 MATLAB 中使用 fill 命令来创建使用 fill 命令创建的框图形 实际代码基于这个 StackOverflow 问题 https stackoverflow com questions 15008705 how to
  • 可以使用antixml创建xml文档吗?

    有一些使用 Anti Xml 从 XML 文档中提取信息的示例 但我找不到使用 Anti Xml 创建 XML 文档的示例 Anti Xml 是否支持创建文档 或者我应该为此使用另一个库 哪个 有人有使用 Anti Xml 创建 XML 文
  • 在 setTimeout() 中使用 $(this) ;

    我想在 jQuery 中动态设置超时 动态设置超时函数需要使用 this 但我似乎无法让它工作 一个例子 div each function var content this attr data content setTimeout thi
  • 输入字段禁用,直到选中单选按钮 (HTML)

    我有两个字段 其中一个是文本输入字段 另一个是选择标签 问题是我只想启用其中之一 用户应通过单击上面的单选按钮之一来选择启用哪一项 因此 如果用户选择第一个单选按钮 输入字段将被启用 如果他选择第二个 则选择标签将被启用 这是我的代码
  • python 中是否有相当于 Ruby 的“rvm”的工具?

    Q Python 中是否有与Ruby 版本管理器 rvm http rvm beginrescueend com workflow rvmrc RVM让你轻松切换完全地不同版本的 Ruby 解释器之间and不同的宝石 模块 集 与解释器和
  • 模仿否定后向查找以匹配 JavaScript 正则表达式中未紧随其后的特定字符的模式

    我在 Javascript 中有这个正则表达式 0x A F0 9 2 g 我想修改它 以便在前一个字符不是时获得匹配 像这样的东西 0x60 gt 正确 0x60 gt 假 我想出了类似的东西 但它不能正常工作 0x A F0 9 2 g
  • 升级期间在 Android Market 中重命名应用程序

    我想在下次升级期间重命名我发布的应用程序 Android Market 是否会将其视为另一次常规升级并保留相关的评级和评论 该应用程序将保留相同的包名称 只要包名称相同 保留什么应用程序名称并不重要 我经常切换我的应用程序标题 在市场中 以
  • 在 DevExpress CheckedComboBox 中获取选中的项目

    我正在使用DevExpress 9 3 CheckedComboBoxEdit 我需要获取所有选中项目的集合 看起来这应该是一个简单的任务 但我发现的最接近解决方案的是我可以使用 CheckedComboBoxEdit Properties
  • 用java生成AutoCAD文件?

    有谁知道如何使用 Java 生成 AutoCAD 绘图吗 dfx 是一个好的界面还是我们应该使用 dwg 文件 我在网上找不到任何关于此的有用信息 开放设计联盟有用于生成 dwg 的库 但如果不成为会员 我就无法查看 API 而且他们似乎也
  • 为什么调用函数时需要“抛出异常”?

    class throwseg1 void show throws Exception throw new Exception my own Exception void show2 throws Exception Why throws i
  • 如何在按确定后停止显示 javascript 警报

    我想在 Facebook 收件箱中有内容时显示提醒 我认为使用用户脚本可以轻松完成 这就是我到目前为止所拥有的 感谢用户脚本 http userscripts org forums论坛 document addEventListener D
  • 在 VB.net 中获取 shell 命令的输出

    我有一个 VB net 程序 在其中调用 Shell 函数 我想在文件中获取从此代码生成的文本输出 但是 这不是执行代码的返回值 所以我真的不知道该怎么做 该程序是一项服务 但可以毫无问题地访问磁盘 因为我已经记录了其他信息 整个服务有多个
  • 如何在 Xcode 9 Playground 中使用 Swift 包管理器 [重复]

    这个问题在这里已经有答案了 是否可以在 Xcode 9 Playground 中使用 Swift Package Manager 目前无法在 Playground 中使用 Swift Package Manager 原因是 Swift 包管
  • Windows 窗体保存到 XML

    我有一个表单 其中包含用户输入的信息 我想将其保存为 XML 我对编程相当陌生 但已经阅读过 XML 是最好的使用方法 我该怎么办呢 如果有帮助的话我可以使用 Sharp Develop 作为 IDE 目前它有 10 个文本框和 10 个日
  • 向函数传递超过 255 个参数

    我只是简单地传递我的论点def声明给def陈述 我不知道您可以通过的参数数量有限制 我假设参数是变量 我需要能够通过超过 255 个参数 有人可以用外行术语帮助我如何解决 超过 255 个参数 谢谢 Code def a Things ha
  • 命名 ant 目标的最佳实践是什么?

    命名 ant 目标的最佳实践是什么 例如 您希望目标 测试 运行什么 所有单元测试 所有功能测试 两个都 用于运行不同类型测试 单元 功能 全部 的标准名称是什么 在 J2SE 中部署软件的目标名称是否有标准 在J2EE 中 我的项目将 a
  • 如何使 tkinter 文本小部件不可选择?

    我想做我的 tkinterText仅作为输出而不是输入 通过一些研究我发现text config state disabled 禁用用户输入 但它仍然允许选择我不想要的文本 我怎样才能得到我的Text小部件不可选择且不可写 最简单的方法是替
  • Android ArrayAdapter 过滤问题

    因为我想使用自定义列表适配器 以便我可以设置列表样式 但过滤器功能不起作用 我可以进行基本过滤 但是一旦过滤结果列表少于我开始过滤时显示的 listItems 数量 应用程序就会崩溃 这段代码中还有第二个问题 我不确定它是否相关 但是当cl