- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在过去使用 ArrayList 和 ArrayAdapter 填充 AutoCompleteTextView 的简单 Android 应用程序中,我现在用自定义适配器替换了 ArrayAdapter。原因是我需要在搜索列表之前从输入的文本中去除空格和一些其他字符(即,输入“O.M.”应该规范化为“OM”,然后应该显示以“OM”开头的建议。
我尝试在 GitHub 上的以下提交中执行此操作:https://github.com/Natureshadow/MirWTFApp/commit/260a4deaee449cb63d3af3c446c94466b90f736c
自定义适配器有一个 getFilter 方法,该方法应该返回一个执行规范化的自定义过滤器,但永远不会调用 getFilter()。
如何找出未调用它的原因,以及如何让应用程序使用自定义过滤器?
StackOverflow 有一些描述类似问题的问题,但所有这些问题都包括更改自定义适配器中 ArrayList 数据的处理,而我没有这样做。
最佳答案
最终的解决方案是一个自定义的 ArrayAdapter
子类,它在 ArrayFilter
甚至看到它之前添加了一个过滤器。
对主应用程序的改变很小,它只需要实例化新命名的 WtfArrayAdapter
并向其构造函数传递一个额外的参数:对包含规范化方法的对象的对象引用(在当前 äpp 的设计,即 MainActivity
类, future 的重构会做得更好):
- ArrayAdapter acronymKeys = new ArrayAdapter(this,
- android.R.layout.simple_list_item_1, sorted);
+ ArrayAdapter acronymKeys = new WtfArrayAdapter(this,
+ android.R.layout.simple_list_item_1, sorted, this);
自定义 WtfArrayAdapter
必须能够从 ArrayFilter
(这是 ArrayAdapter
的内部私有(private)类)调用方法,所以它需要属于 package android.widget;
。我会饶你full imports, comments, etc.并将重现以下重要部分:
public class WtfArrayAdapter<T> extends ArrayAdapter<T> {
新成员:- 预过滤器归一化方法的对象- 我们内部私有(private)类的对象- 父类的内部私有(private)类对象(不幸的是,ArrayAdapter.mFilter
是private
)
private MainActivity sParent;
private WtfArrayFilter sFilter;
private Filter pFilter;
扩展构造函数(我们只需要实现我们实际调用的那个):- 调用继承的构造函数- 存储父级的 mFilter
值- 实例化我们自己的 WtfArrayFilter
- 存储预过滤器规范化方法的对象,因为 WtfArrayFilter
稍后需要它
public WtfArrayAdapter(Context context, @LayoutRes int resource,
@NonNull T[] objects, MainActivity parent) {
super(context, resource, 0, Arrays.asList(objects));
sParent = parent;
sFilter = new WtfArrayFilter();
pFilter = super.getFilter();
}
覆盖 ArrayAdapter
的 getFilter()
方法以始终返回我们新的 WtfArrayFilter
:
public Filter getFilter() {
return sFilter;
}
将 WtfArrayFilter
实现为 Filter
子类,就像 ArrayFilter
一样,并将所有无聊(即未更改)的调用转发给继承的 数组过滤器
:
private class WtfArrayFilter extends Filter {
protected void publishResults(CharSequence constraint,
FilterResults results) {
pFilter.publishResults(constraint, results);
}
在调用继承的ArrayFilter
的过滤方法之前,我们只需要改变一个方法来做我们自己的过滤:
protected FilterResults performFiltering(CharSequence prefix) {
return pFilter.performFiltering(prefix == null ? null :
sParent.normaliseAcronym(prefix.toString()));
}
}
}
欢迎改进,我仍然是 Java™ 初学者。
关于java - 未调用自定义 ArrayAdapter getFilter(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33736439/
要更新 Listview 我们可以做以下两件事: 1) 创建一个新的ArrayAdapter,并在每次更新数据时将其绑定(bind)到ListView。 this.listView.setAdapte
基本上我所拥有的是一个显示 ListView 的 fragment 。它目前使用 ArrayAdapter。但是,我正在尝试扩展 ArrayAdapter 以制作我自己的自定义适配器。然后,当我更改代
这真的很奇怪。 当我为 ListView 使用标准 ArrayAdapter 时,调用 setItemChecked 工作正常 但是当使用定制的 ArrayAdapter 时它不会。 原因是什么?这是
我想在我的 android 应用程序中使用 AutoCompleteTextView。我知道如何将它与简单的字符串数组一起使用,但我希望 AutoCompleteTextView 使用对象列表来执行完
问题总结:adapter和spinner都在Spinner Activity中。一旦用户选择了一个名字,它就会将它们发送到主 Activity 。我想从另一个 Activity 中调用 ArrayAd
lang.NullPointerException android.widget.ArrayAdapter.init(ArrayAdapter.java)只是将 Arraylist 值添加到 cust
在开发 Android 应用程序时,我从类似于“Item 1”、“Item 2”、“Item 3”的网站上得到了一行响应我需要将这一行转换为一个列表,以便在 simplelistitem 的数组适配器
您好,我如何检查复选框是否已选中,以及是否已选中我怎样才能删除有问题的行?谢谢你 数组适配器: public class Todoadapter extends ArrayAdapter {
https://developer.android.com/guide/topics/ui/declaring-layout#FillingTheLayout 在这些文档中,我们有以下代码 fragm
我有一个填充数据“neededRepData”的列表,我正在尝试将此列表添加到我的适配器中,但遇到了问题。下面是我的 Reps 类和我的方法(来自另一个类)来迭代所需的 RepData。 public
拥有可以处理多种对象类型的数组适配器的最佳实践是什么? Adapter extends ArrayAdapter 我有 3 种类型的类(class) A.class , B.class , C.cla
我正在制作一个将 JSON 数据解析为 ListView 的应用程序。这对我不起作用;它没有给我任何数据。 这是我的代码: public class MainActivity extends AppC
我有一个 Activity 从另一个 Activity 加载sharedPreference,并从当我编译我的应用程序时,使用 arrayAdpter 将 sharePreferenece 放入 li
我尝试使用 arrayAdapter 自定义将图像和文本加载到 ListView,但加载图像失败 这是我的数组适配器 public class CustomAdapter extends ArrayA
我在使用我的应用程序时遇到问题。我刚刚开始开发该应用程序,到目前为止只花了大约 15 个小时。但我遇到了障碍。通常我可以用谷歌搜索障碍,我的大部分答案都来自这个论坛! 所以我希望我能找到解决方案。下面
我之前曾用其他适配器(如 SimpleAdapter)问过这个问题,但简单适配器的解决方案不适用于 ArrayAdapter。在 SimpleAdapter 中,我获得了屏幕宽度和高度,然后将其传递给
我有 3 个类(class),我希望使用自动完成文本框向用户显示来自 Web 服务(rest api)的某些数据(又名城市)。我已经在我自己的应用程序的各种功能上使用了这个实现,但是由于某种原因,te
我正在从 Google App Engine 获取字符串形式的数据,因此我必须在一个线程中执行此操作。接下来我想在 ListView 中显示它,我正在尝试执行类似以下代码的操作: public voi
我有一个带有自定义 ArrayAdapter 的 ListView ,它设置在一个 fragment 中。仅设置 ListView 中的第一行。 这可能是一般使用带有 fragment 的 ListV
我正在尝试修改 MyKong 中的代码,添加一些更改 TextView 字体的行,但是当我尝试运行时遇到强制关闭。 这里是 MobileArrayAdapter.java > package com.
我是一名优秀的程序员,十分优秀!