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 上有哪些字体可用? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我知道安卓有一个字体集合 http www ascenderfonts com store search
  • 与其他图标相比,AppCompat ShareActionProvider 图标太大

    我将 ActionBarSherlock 更改为 AppCompat v7 我已经完成了使其工作所需的所有更改 但是共享图标 使用 ShareActionProvider 发生了一些奇怪的情况 与其他图标相比 共享图标太大 我还使用支持库进
  • 强制用户在 Android 中的 EditText 中输入内容

    我的活动中有几个编辑文本 我希望我的用户在提交表单之前正确输入 我该怎么做 我还有旋转器和 RadioGroup 按钮 你可以加验证在提交按钮上单击 private boolean validateFields int yourDesire
  • 如何在 Android 中使用 Assets 中预加载的 SQLite 数据库

    我想用preloaded database在我的应用程序中意味着尝试在安装 apk 时获取数据库 以便可以使用已保存在其中的数据 我复制了 成分 db 文件位于资产文件夹中 并使用以下代码 但这会出现错误 从资源文件复制数据库时出现问题 我
  • 使用 android AudioTrack 在左或右扬声器中播放声音

    我正在应用程序中的 AudioTrack 的帮助下播放声音 但我想在特定扬声器 耳朵中播放声音 即左扬声器或右扬声器或两个扬声器 以下代码是我用来播放声音的 private AudioTrack generateTone double fr
  • Firestore - RecycleView - 图像持有者

    我不知道如何编写图像的支架 我已经设置了 2 个文本 但我不知道图像的支架应该是什么样子 你能帮我告诉我图像的文字应该是什么样子才能正确显示吗 holder artistImage setImageResource model getArt
  • Renderscript 示例构建错误

    所以我想尝试使用 RenderScript 的示例 并在 Eclipse 中导入了 HelloWorld 但它给了我这样的错误 2011 10 25 13 10 48 HelloWorld home mileoresko workspace
  • 如何以编程方式断开拨出呼叫

    我使用以下代码以编程方式断开呼叫 但它不起作用 private void callDisconnect try TelephonyManager manager TelephonyManager this getSystemService
  • 如何强制从本机代码打开 Android 软键盘?

    我有一个游戏 当用户触摸屏幕时 它使用从 C 到 Java 的回调来强制打开软键盘 Java代码很简单是这样的 this inputMethodManager toggleSoftInput InputMethodManager SHOW
  • 如何持续更新MPAndroidChart中的Y轴值

    我希望 LineChart 中的轴能够实时调整其最大值和最小值 当新数据的 Y 值增加 正值和负值 时 像 ResetAxisMaxValue 和 ResetAxisMinValue 这样的函数可以很好地工作 但是 一旦信号再次变低 Y 值
  • Firebase ANR - 甚至不使用 firebase

    随着 GMS 的最新更新 引入了新的 ANR 如果您退出应用程序 然后返回 则 ANR 就会初始化 线程跟踪似乎指向 Firebase 但我什至从未开始使用 Firebase 我猜它一定是新的 GMS 包的一部分 06 11 00 34 0
  • 以编程方式将 TextView 添加到主屏幕小部件

    我想以编程方式将文本视图控件添加到我的主屏幕小部件 在下面的示例中 我使用 TextView 填充 Linearlayout 但是这里应该如何使用 RemoteView 它只接受 xml 资源布局作为参数 public class MyWi
  • 如何在进入新活动之前终止线程和处理程序

    大家好 在我尝试清理处理程序时 这段代码可能有点混乱 因为我一直在尝试追踪崩溃发生的位置 我有一个对话框活动 显示密码输入 进度条由线程和处理程序动画显示 似乎当我试图查看进度条是否完成并尝试终止线程时 当我尝试进入新活动时 我这样做的方式
  • Android Studio IDE 上的“文本/设计”选项卡缺少新的 Android 项目

    如何在创建新项目期间自动创建的 Activity main xml 文件的 src main res layout 文件夹中启用文本 设计选项卡 如果我右键单击并在所述文件夹上创建 xml 文件 则设计 文本选项卡存在 有什么建议吗 谢谢
  • Android - 如何更改 TimePicker 中的文本颜色?

    我正在使用 TimePicker 到 LinearLayout 中 背景颜色 黑色 但是 我看不到 TimePicker 中的数字 并且我需要在布局中将背景颜色设置为黑色 如何更改 TimePicker 中的 textColor 我已经尝试
  • 在为 Android 实现 Google 登录时,任务“:app:transformClassesWithDexForDebug”执行失败

    我正在尝试为 Android 实现 Google 登录 并且我正在按照以下说明进行操作 https developers google com identity sign in android start integrating https
  • 在 Honeycomb Android 3.0 中显示 Action Bar 菜单项的图标

    我正在使用 Honeycomb android 3 0 开发 Android 应用程序 我正在尝试在 Action Bar 中显示菜单 菜单有一个图标和标题 当我们单击菜单项时 它会以下拉列表的形式显示其项目 它是下拉列表中带有项目名称但不
  • Android 自定义警报对话框中的 OnClickListener

    我是一个自学成才的初学者 感谢耐心 谢谢 在 Eclipse 中 我使用自己的 xml 文件 custom dialog 创建了一个自定义警报对话框 称为 usernamealert 如果用户尚未输入用户名 即 username lengt
  • Android:解析 XML 数据的最佳解析器 [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我正在开发一个应用程序 其中我第一次要解析来自远程服务器的 xml 文件中的数据 但我无法选择哪个解析器是有效的或最适合解析的 因为我知道主要有
  • Android:如何检测手机设置中的语言已更改

    我如何检测我的手机语言是否已更改 例如 Facebook 应用程序将向我们宣布 please wait we preparing your language i used myString Locale getDefault getDisp

随机推荐

  • 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