ListView中自定义ArrayAdapter的自定义过滤

2023-11-29

我写了一个自己的ArrayAdapter,如下所示:

public class PoiListAdapter extends ArrayAdapter<Poi> implements Filterable {

    private Context context;
    private final List<Poi> valuesPoi;
    private ItemsFilter mFilter;

    public PoiListAdapter(Context context, List<Poi> valuesPoi) {
        super(context, R.layout.poilist);
        this.context = context;
        this.valuesPoi = valuesPoi;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        LayoutInflater inflater = (LayoutInflater) context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        View rowView = inflater.inflate(R.layout.poilist, parent, false);
        TextView textViewName = (TextView) rowView.findViewById(R.id.name_poi);
        TextView textViewDis = (TextView) rowView
                .findViewById(R.id.discrip_poi);
        textViewName.setText(valuesPoi.get(position).getName());
        textViewDis.setText(valuesPoi.get(position).getDiscription());
        return rowView;
    }

    /**
     * Implementing the Filterable interface.
     */
    public Filter getFilter() {
        if (mFilter == null) {
            mFilter = new ItemsFilter(this);
        }
        return mFilter;
    }

    public List<Poi> getValuesPoi() {
        return valuesPoi;
    }

    public void addValuesPoi(Poi p) {
        valuesPoi.add(p);
    }
      @Override
  public void clear() {
    valuesPoi.clear();
  }
}

对于这个适配器我想实现一个搜索功能。因此我实现了一个自定义过滤器类:

public class ItemsFilter extends Filter {

private PoiListAdapter poiListAdapter;

public ItemsFilter(PoiListAdapter poiListAdapter) {
    this.poiListAdapter = poiListAdapter;
}

@Override
protected FilterResults performFiltering(CharSequence constraint) {
    constraint = constraint.toString().toLowerCase();
    FilterResults result = new FilterResults();
    ArrayList<Poi> filterList = new ArrayList<Poi>();
    if (constraint != null && constraint.toString().length() > 0) {
        ArrayList<Poi> orginalList = new ArrayList<Poi>(
                poiListAdapter.getValuesPoi());

        for (Poi p : orginalList) {
            if (p.getName().toLowerCase().contains(constraint))
                filterList.add(p);
        }
        Log.i("DEBUG", orginalList.toString());
        result.values = filterList;
        result.count = filterList.size();

    } else {

        result.values = poiListAdapter.getValuesPoi();
        result.count = poiListAdapter.getValuesPoi().size();

    }
    return result;
}

@SuppressWarnings("unchecked")
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
    ArrayList<Poi> fitems = (ArrayList<Poi>) results.values;
    poiListAdapter.clear();
    for (Poi p : fitems) {
        poiListAdapter.addValuesPoi(p);
        poiListAdapter.notifyDataSetChanged();
    }
}

1. 问题

....我得到了一个 java.util.concurrentmodificationException :

for (Poi p : fitems) {
            poiListAdapter.addValuesPoi(p);
            poiListAdapter.notifyDataSetChanged();
        }

我认为问题是我想修改access下的Arraylist。我想我必须使用同步,但我以前从未使用过它。

UPDATE:这下问题就解决了!这里是代码:

for(Iterator<Poi> i = fitems.iterator(); i.hasNext();) {
        Poi p = i.next();
        poiListAdapter.addValuesPoi(p);
        //poiListAdapter.notifyDataSetChanged();
    }

2.问题

列表视图在开始时是空的。一开始我想显示所有元素!搜索元素也不会显示任何内容!列表视图目前什么也没有显示!


可以通过两种方式避免并发修改:

  1. poiListAdapter.addValuesPoi(p) 在同步方法中添加此代码。同步方法不能并发访问。

  2. 使用 Collections.synchronizedList

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

ListView中自定义ArrayAdapter的自定义过滤 的相关文章

  • 如何从 SDK 实现每个会话的 Google Places 自动完成功能?

    是否可以从 Android 和 iOS 应用程序的 place sdk 实现基于会话的自动完成 根据 6 月 11 日生效的新 Google 地图框架定价 对自动完成的请求可以分为基于击键 会话的请求 我找不到描述实施步骤的文档 除了这个参
  • android edittext中的字符映射

    我想让我的编辑文本就像我写字符 g 时一样 它是相关的映射自定义字符应该写成印地语中的 我认为应该有字符映射 但没有知识任何人都可以帮助我 怎么做 其他应用程序https play google com store apps details
  • 如何自定义菜单项的背景颜色?

    我正在尝试定制Toolbar的弹出菜单 现在我无法设置菜单项的背景颜色 我的 styles xml 如下所示
  • Android 初学者:Android gridview 中的触摸事件

    我正在使用以下代码来使用 gridview 执行操作 稍作修改http developer android com resources tutorials views hello gridview html http developer a
  • Android WebView里面的ScrollView只滚动scrollview

    在我的应用程序中 我有一个 ScrollView 其中包含一些线性视图 一些文本视图和一个 Webview 然后是其他线性布局等 问题是 WebView 不滚动 Scroll 仅侦听 ScrollView 有什么建议么
  • 如何在我现有的 Android 应用程序中使用 Telegram API(包括聊天应用程序)?

    我想使用 telegram API 在我现有的 Android 应用程序中开发聊天功能 我不知道如何实施 我认为 看看Telegram 数据库库 测试版 从这里TDLib https core telegram org tdlib 俄语 但
  • Dialog.setTitle 不显示标题

    我正在尝试向我的对话框添加自定义标题 但是每当我运行我的应用程序时 它都不会显示标题 我创建对话框的代码是 final Dialog passwordDialog new Dialog this passwordDialog setCont
  • Android:后台Activity可以执行代码吗?

    后台的活动是否被视为 正在运行 并且可以执行代码 还是处于挂起状态 他们暂停了 活动生命周期 http developer android com reference android app Activity html ActivityLi
  • Android 手机作为 GSM 调制解调器在 PC 上发送/接收短信?

    是否可以将 Android 移动设备用作 PC 上的 GSM 调制解调器 我正在 net下开发应用程序来发送 接收短信等 现在我想通过 USB 将我的 Android 设备连接到我的 PC 并将其用作 GSM 调制解调器来与其通信 这里是参
  • 如何在谷歌地图android上显示多个标记

    我想在谷歌地图android上显示带有多个标记的位置 问题是当我运行我的应用程序时 它只显示一个位置 标记 这是我的代码 public class koordinatTask extends AsyncTask
  • okhttp 获取失败响应

    我已经在我的 android 客户端中实现了 okhttp 来进行网络调用 当我收到失败响应时 我会收到失败代码以及与该代码相关的文本作为消息 但我没有收到服务器发送给我的自定义失败响应 在我实施的代码中的失败响应中 我收到的消息只是 错误
  • 我应该释放或重置 MediaPlayer 吗?

    我有自己的自定义适配器类 称为 WordAdapter 并且我正在使用媒体播放器 名为pronounce WordAdapter 类中的全局变量 我有不同的活动 其中每个列表项都有线性布局 名为linearLayout 我正在设置onCli
  • 您使用什么物理 Android 设备进行测试?

    有什么好的推荐用于测试目的的物理 Android 设备吗 我正在苹果阵营寻找像 iPod touch 这样的设备 可以帮助 iOS 开发人员测试他们的东西 我知道有 Nexus One 但那东西相当昂贵 而且我并不真正关心手机的东西 而是可
  • Android 如何将总天数准确更改为年、月、日?

    我正在做一个应用程序 该应用程序与根据给定的生日日期输入获取一个人的年龄有关 为此 我从下面的代码中获取从该日期到当前日期的总天数 String strThatDay 1991 05 10 SimpleDateFormat formatte
  • 如何检查 Android 中的同步设置

    我正在构建一个 Android 应用程序 我需要检查设备中注册的每个单独帐户的同步设置 我知道我可以通过 ContentResolver 类来做到这一点 但我遇到了一些问题 我已设法获取设备上所有帐户的列表 但我不知道在运行时从哪里获取特定
  • 问题:为什么React Native Video不能全屏播放视频?

    我正在react native 0 57 7 中为android和ios创建一个应用程序并使用反应本机视频 https github com react native community react native video播放上传到的视频
  • CamcorderProfile.videoCodec 返回错误值

    根据docs https developer android com reference android media CamcorderProfile html 您可以使用CamcorderProfile获取设备默认视频编解码格式 然后将其
  • 如何使用 AccessibilityService 在 Android 中模拟按键

    我正在编写一个辅助服务 我一直在尝试在应用程序上进行一些自动搜索 我使用accessibilityservice action paste来填充EditText 然后我需要模拟软键盘上的按键 但我不知道如何做 你们能帮我一下吗 你可以尝试A
  • Dagger 2 中“HasFragmentInjector”的实际用法是什么

    我之前已经实现了 dagger2 v2 2 但现在他们也添加了 dagger android 部分 所以我正在用它创建示例项目 我知道旧的方法论 Provide and Modules and 成分等注释 但从 Dagger 2 8 开始
  • Git 实验分支还是单独的实验存储库?

    我正在开发一个 Android 应用程序 并且在整个开发周期中一直使用 Git 现在 我想构建并发布实验性功能 供人们尝试和安装 同时仍将原始的 稳定的应用程序安装在他们的设备上 现在 这意味着我需要使用不同的包名称 这会更改开发项目中的一

随机推荐

  • Colab+TPU 不支持 TF 2.3.0 tf.keras.layers.experimental.preprocessing

    我正在使用更新我的模型TF 2 3 0基于Colab TPUhttps keras io examples vision image classification efficientnet fine tuning 特别是在数据增强和从预训练
  • 如何以托管方式在.NET中获取父进程

    我在 NET 中寻找了很多获取父进程的方法 但只找到了 P Invoke 方式 这是一个解决方案 它使用 p invoke 但似乎运行良好 32 或 64 cpu
  • 如何在 iPhone 中显示日历而不是使用 UIDatePicker?

    我正在使用 UIDatePicker 控制器在 iPhone 应用程序中选择日期 现在 我想显示日历视图而不是 UIDatePicker 控制器 我已经在谷歌上搜索到了我的最佳水平 但是 我找不到解决我的问题的确切解决方案 任何人都可以帮助
  • 无法将值传递给文档签名模板

    我正在尝试弄清楚如何将表单字段值传递到我的文档签名模板 我查看了 v2 API 文档 但没有发现任何结果 您只需在 JSON 请求属性 或 XML 中使用tabLabel and value特性 例如 这将填充 2 个数据字段 一个名为 A
  • 如何使用复制构造函数和复制赋值都是私有的对象?

    读书中TCPL 我遇到了一个问题 正如标题所提到的 然后 私有 类是 class Unique handle private Unique handle operator const Unique handle rhs Unique han
  • Haskell 中通过 unsafePerformIO 的全局变量

    GHC API 要求在调用之前进行一些初始化 具体来说 parseStaticFlags只能调用一次 我有可以调用的函数runGhc MaybeFilePath Ghc a gt IO a多次运行某些 GHC API 方法 然而 某些初始化
  • 两个不同时区的时差

    我想获取当前时间 即 IST 和存储在 DB EST 中的时间之差 为此 我尝试在计算差异之前将当前时间转换为东部时间 但它不起作用 在下面的方法中 当地时间不会仅转换为 EST 您能建议我更好的方法吗 返回类型为getModifiedDa
  • 如何从url中获取参数?

    我有一个像这样的网址 http localhost 8080 steer trip create 3 在哪里 在我的页面中 我想使用 jquery 获取值 3 请帮我 From 根据位置突出显示按钮 var pathname window
  • 连续多次转换未按预期工作[重复]

    这个问题在这里已经有答案了 根据我的理解 强制转换用于将值从一种类型转换为另一种类型 我在 Joshua Bloch 和 Neal Gafter 所著的 Java Puzzlers Traps Pitfalls and Corner Cas
  • PHP 分割/分解字符串

    我想在 PHP 中分割 分解一个字符串 该字符串如下所示 strong Label strong p Value p 得到这个结果 array strong Label strong p Value p 我怎样才能做到这一点 你可以这样做
  • PyObjC“此应用程序不允许通知”

    我正在尝试测试一个简单的 Python 脚本来发送 macOS 通知 import UserNotifications def notif callback err print Error in notification callback
  • facebook 登录错误,IOS 9,Swift

    我正在尝试在我的应用程序中实现 Facebook 登录 但出现错误 我的 info plist 代码是
  • 如何更改 Vagrant“默认”机器名称?

    启动 vagrant box 时名称 default 从何而来 vagrant up Bringing machine default up with virtualbox provider 有办法设置这个吗 我发现多个选项令人困惑 因此我
  • 冒泡排序与选择排序的效率

    我知道冒泡排序和选择排序的大 O 值是相同的 n 2 但是当我尝试使用大小为 1000 的数组运行两者时 冒泡排序需要 962037 次交换来对数组进行排序 而选择排序Sort 只需要 988 次交换即可对数组进行排序 为什么这些不同 因为
  • 当 np.nan 设置为默认值时,为什么 np.select 返回 'nan' 作为字符串而不是 np.nan ?

    我在用np select根据应用于其他列的多个条件创建新列 这是一个简单的例子 df pd DataFrame A 0 3 4 B 10 0 2 mask1 df A 0 mask2 df A 4 df df assign C np sel
  • 在 FTP 服务器上重命名文件时出现“(553) 文件名不允许”

    在我的应用程序中 我在 FTP 服务器的一个目录中拥有文件 并将该文件源移动到目标路径 在此过程中 当我移动选定的源文件时 该源文件不会显示在源路径中 它将仅显示在目标路径中 我尝试了下面的代码 但出现错误 string sourceurl
  • iso-8859 和 iso-8859-1 之间的区别,

    iso 8859支持拉丁字符吗我需要在java程序中使用iso 8859 1来读取中文字符文件 这有什么区别 ISO 8859 是 8 位字符编码的标准 8 位给你 256 种组合 这对于大多数拉丁字母的扩展来说是可以的 但对于中文字符来说
  • 合并 ES6 地图/集的最简单方法?

    有没有一种简单的方法可以将 ES6 地图合并在一起 例如Object assign 当我们讨论这个问题时 ES6 Sets 怎么样 比如Array concat 对于套装 var merged new Set set1 set2 set3
  • Spring获取当前的ApplicationContext

    我正在为我的 Web 应用程序使用 Spring MVC 我的豆子写在 spring servlet xml file 现在我有课MyClass我想使用 spring bean 访问这个类 In the spring servlet xml
  • ListView中自定义ArrayAdapter的自定义过滤

    我写了一个自己的ArrayAdapter 如下所示 public class PoiListAdapter extends ArrayAdapter