Android AutoCompleteTextView 与自定义适配器过滤不起作用

2023-11-27

我有自定义 CustomerAdapter

public class CustomerAdapter extends ArrayAdapter<Customer> {
    private final String MY_DEBUG_TAG = "CustomerAdapter";
    private ArrayList<Customer> items;
    private int viewResourceId;

    public CustomerAdapter(Context context, int viewResourceId, ArrayList<Customer> items) {
        super(context, viewResourceId, items);
        this.items = items;
        this.viewResourceId = viewResourceId;
    }

    public View getView(int position, View convertView, ViewGroup parent) {
        View v = convertView;
        if (v == null) {
            LayoutInflater vi = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            v = vi.inflate(viewResourceId, null);
        }
        Customer customer = items.get(position);
        if (customer != null) {
            TextView customerNameLabel = (TextView) v.findViewById(R.id.customerNameLabel);
            if (customerNameLabel != null) {
                customerNameLabel.setText(String.valueOf(customer.getName()));
            }
        }
        return v;
    }
}

and customer_auto layout

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/customerNameLabel"
    android:layout_width="fill_parent" android:layout_height="fill_parent"
    android:padding="10dp" android:textSize="16sp" 
    android:textColor="#000">
</TextView>

和我的public void onCreate

AutoCompleteTextView customerAutoComplete = (AutoCompleteTextView) findViewById(R.id.autocomplete_customer);
CustomerAdapter customerAdapter = new CustomerAdapter(this, R.layout.customer_auto, customerList);
customerAutoComplete.setAdapter(customerAdapter);

和客户.java

public class Customer implements Parcelable {

    private int id;
    private String name = "";

    public Customer() {
        // TODO Auto-generated constructor stub
    }

    /**
     * This will be used only by the MyCreator
     * 
     * @param source
     */
    public Customer(Parcel source) {
        /*
         * Reconstruct from the Parcel
         */
        id = source.readInt();
        name = source.readString();
    }

    public void setId(int id) {
        this.id = id;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getId() {
        return this.id;
    }

    public String getName() {
        return this.name;
    }

    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeInt(id);
        dest.writeString(name);
    }

    public static final Parcelable.Creator CREATOR = new Parcelable.Creator() {

        @Override
        public Customer createFromParcel(Parcel source) {
            return new Customer(source);
        }

        @Override
        public Customer[] newArray(int size) {
            return new Customer[size];
            // TODO Auto-generated method stub
        }

    };

    @Override
    public String toString() {
        return this.name;
    }

}

但自动建议框无法正确过滤。例如;如果我输入an在测试盒中,客户从br正在出现!


我必须超越获取过滤器()适配器的方法

这是对我有用的代码,感谢sacoskun

public class CustomerAdapter extends ArrayAdapter<Customer> {
    private final String MY_DEBUG_TAG = "CustomerAdapter";
    private ArrayList<Customer> items;
    private ArrayList<Customer> itemsAll;
    private ArrayList<Customer> suggestions;
    private int viewResourceId;

    public CustomerAdapter(Context context, int viewResourceId, ArrayList<Customer> items) {
        super(context, viewResourceId, items);
        this.items = items;
        this.itemsAll = (ArrayList<Customer>) items.clone();
        this.suggestions = new ArrayList<Customer>();
        this.viewResourceId = viewResourceId;
    }

    public View getView(int position, View convertView, ViewGroup parent) {
        View v = convertView;
        if (v == null) {
            LayoutInflater vi = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            v = vi.inflate(viewResourceId, null);
        }
        Customer customer = items.get(position);
        if (customer != null) {
            TextView customerNameLabel = (TextView) v.findViewById(R.id.customerNameLabel);
            if (customerNameLabel != null) {
//              Log.i(MY_DEBUG_TAG, "getView Customer Name:"+customer.getName());
                customerNameLabel.setText(customer.getName());
            }
        }
        return v;
    }

    @Override
    public Filter getFilter() {
        return nameFilter;
    }

    Filter nameFilter = new Filter() {
        @Override
        public String convertResultToString(Object resultValue) {
            String str = ((Customer)(resultValue)).getName(); 
            return str;
        }
        @Override
        protected FilterResults performFiltering(CharSequence constraint) {
            if(constraint != null) {
                suggestions.clear();
                for (Customer customer : itemsAll) {
                    if(customer.getName().toLowerCase().startsWith(constraint.toString().toLowerCase())){
                        suggestions.add(customer);
                    }
                }
                FilterResults filterResults = new FilterResults();
                filterResults.values = suggestions;
                filterResults.count = suggestions.size();
                return filterResults;
            } else {
                return new FilterResults();
            }
        }
        @Override
        protected void publishResults(CharSequence constraint, FilterResults results) {
            ArrayList<Customer> filteredList = (ArrayList<Customer>) results.values;
            if(results != null && results.count > 0) {
                clear();
                for (Customer c : filteredList) {
                    add(c);
                }
                notifyDataSetChanged();
            }
        }
    };

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

Android AutoCompleteTextView 与自定义适配器过滤不起作用 的相关文章

  • 在 Android 上将视频设置为壁纸

    我想知道如何将视频设置为壁纸 否则不可能 我可以将图像设置为壁纸 并且可以构建动态壁纸 但无法将视频设置为壁纸 所以有人知道我该怎么做吗 提前致谢 我认为唯一可以做到的方法是将其合并到 动态壁纸 中 缺点是正如其他人提到的那样 这会严重影响
  • getItemAtPosition() 未在列表视图中返回值

    我创建了一个自定义基本适配器类 用图像和文本填充列表视图 类的代码如下 public class ViewAdapter extends BaseAdapter private Activity activity private Strin
  • Android 中的列表视图到 pdf

    我有一个自定义列表视图 我想从整个列表视图制作pdf 我参考了很多帖子并实现了下面的代码 该代码将我的列表视图转pdf 但问题是它不包含整个列表视图项目 pdf 中仅提供前几项 我的转换函数列表视图转pdf is fab setOnClic
  • Android - 启用和禁用蓝牙 - SDK 3 (OS 1.5) - 以编程方式?

    我编写了代码来以编程方式启用和禁用各种功能 例如 Wifi 振铃模式 飞行模式 您将在电源切换小部件中看到的所有内容 我还没有找到如何做的一个是蓝牙 看来在 SDK level 3 OS 1 5 中没有漂亮的蓝牙管理器类 有没有人指出关于启
  • XAMARIN - 添加来自 youtube 的视频

    我搜索如何从 youtube 添加视频的信息 例如 我想从一些 YouTube 链接添加视频 我认为它应该在网络视图中 但我需要一些详细信息 因为我找不到有关我的问题的任何信息 您可以使用 webview 播放 youtube 视频 str
  • Android 和 iOS 中的应用程序文件大小差异

    通过使用两个应用程序分发服务 Android 市场和 Apple 应用程序商店 我发现了一个谜团 Apple 应用程序的文件大小通常大于 Android 应用程序 我似乎找不到任何对这些差异的解释 而且这似乎是一个未触及的主题 我尝试过分配
  • Android:NotificationCompat.MediaStyle 操作按钮不执行任何操作

    我有一个简单的 Android 应用程序 其中包含一个Activity and a Service源自于MediaBrowserServiceCompat 我已成功将其设置为通过使用播放我的主要活动中的音频MediaBrowserCompa
  • 按钮上方带有文本的单选按钮

    我是 Android 新手 我需要在我的活动中添加单选按钮 但我需要将文本放在项目符号按钮的顶部 请提供任何帮助 我发现了以下内容 尽管我不明白 drawable in 选择器和 style Tab 样式是什么 顶部带有文本的单选按钮 ht
  • Android TabLayout:均匀分布

    我正在查看 Google IO 中使用的 Google 类 称为 SlidingTabLayout 在该类中 有一个名为 setDistributeEvenly 的方法 它允许所有这些选项卡在屏幕上均匀分布 每个选项卡具有相同的大小 中心对
  • 错误:类 kotlin.reflect.jvm.internal.FunctionCaller$FieldSetter

    我已尝试一切方法来消除此错误 但它不断出现 Class kotlin reflect jvm internal FunctionCaller FieldSetter can not access a member of class com
  • 无法在 Android Studio 中运行项目

    当我尝试在 Android Studio 中运行我的项目时 我收到以下错误消息 Execution failed for task CricHQ dexDebug gt com android ide common internal Log
  • 应用程序运行时相对布局中的元素显示不同

    我有一个ListView在片段内创建 并且它有一个搜索过滤器 问题是 XML 布局在 android studio 中显示正常 但在模拟器或手机中运行时 它显示不同 与我对齐时不正确 并且当我单击SearchView它位于选项卡导航下方 谁
  • Android RxJava 2 JUnit 测试 - android.os.Looper 中的 getMainLooper 未模拟 RuntimeException

    我在尝试为正在使用的演示者运行 JUnit 测试时遇到 RuntimeExceptionobserveOn AndroidSchedulers mainThread 由于它们是纯 JUnit 测试而不是 Android 仪器测试 因此它们无
  • Android 报告“Error=Unable to find Instrumentation info for: ComponentInfo {}”

    stackoverflow 上有很多关于这个问题的主题 问题 例如错误 无法找到以下仪器信息 ComponentInfo https stackoverflow com q 21294945 513413 和其他网站 但使我的问题与其他网站
  • 当应用程序从最近的应用程序中滑动时,前台服务会被终止,通知也会被删除

    我有一个foreground service有通知 当应用程序从最近的应用程序托盘中滑出时 服务将被终止 通知也会被删除 这是我的服务的代码VoiceService class Override public IBinder onBind
  • 如何为部分 Android 活动创建通用代码?

    我的申请中有 14 项活动 这 9 个活动中包含自定义标题栏和选项卡窗格 所以在这里我需要在一个地方编写这个通用代码 而不是在每个包含自定义标题栏和选项卡窗格代码的活动中编写冗余代码 即布局及其活动特定代码 有哪些可能的方法可以做到这一点
  • 如何在不下载子项的情况下从 Firebase 获取子项密钥?

    我有一个 Firebase 数据库 其中的节点 items 有很多子项 我想导入子项键的列表 由于每个子项都包含相当多我对此不感兴趣的数据 因此我想仅下载子项密钥 以最大程度地减少传输的数据量 为了便于说明 假设我有以下数据结构 然后我想获
  • Android 使用不同的签名密钥更新市场应用程序

    开发人员使用他的个人密钥库签署了应用程序 但它应该是公司的密钥库 现在是否可以使用公司的密钥库更新市场中的应用程序 并且仍然可以简化对用户的更新 这有什么后果吗 不可以 您必须将该应用程序作为新应用程序发布到市场上 这次是用公司的key签名
  • 找不到与给定名称“@style/Theme.AppCompat.Light”匹配的资源

    我已经研究这个问题几个小时了 从 github 下载存储库后 任何 xml 文件中的唯一错误是 No resource found that matches the given name style Theme AppCompat Ligh
  • 带有包含布局的导航抽屉布局

    我认为我的问题实际上很简单 但我不知道如何解决 有一个工作导航抽屉 代码如下

随机推荐

  • 传递父类作为参数?

    是否可以在创建实例之前不指定父类 例如像这样的东西 class SomeParentClass something class Child unspecifiedParentClass something instance Child So
  • php类中的回调函数

    由于某些原因 我们的托管公司使用 PHP 5 2 甚至没有预安装 mysqli 和 PDO 我别无选择 只能重写部分代码以使其兼容 5 2 所以 这是我的问题 在 PHP 5 2 中 不支持匿名函数 因此我做了以下测试以确保我正确更改了代码
  • iOS 使 UIImage 的一部分透明

    我有一个 UIImage 其中一部分已被用户选择清除 使其透明 为了进行选择 我使用了 NSBezierPath 如何在 iOS 中清除 使 UIImage 的部分透明 首先 我假设您有 UIBezierPath iOS 而不是 NSBez
  • PHP cURL HTTP 代码返回 0

    我不明白 当我 echo httpCode 时 我总是得到 0 当我将 html brand 更改为损坏的网址时 我期待 404 有什么我想念或不知道的吗 谢谢 check if url exist ch curl init curl se
  • 如何重新构建默认的“Launcher”应用程序?

    我的目标是修改Launcher应用程序并动态修改和更改主题 我在以下位置看到了几个 家庭 应用程序http www cyrket com p android com stain46 taghome 看来他们采用了默认的主页 启动器 并对其进
  • printf 中用星号填充?

    我已经搜索了高低 但在 C 中的 printf 中 似乎只有零填充和空白填充 我正在寻找自己的填充 在本例中使用星号 例如 假设宽度为8个字符 Input 123 Ouput 123 00 Input 3输出 3 00 我怎样才能做到这一点
  • Bash 中的嵌套函数调用

    现在 我正在尝试将一个 bash 函数调用嵌套在另一个函数调用中 以便一个函数的输出用作另一个函数的输入 是否可以像我在这里尝试那样在 bash 中嵌套函数调用 首先 我定义了这两个函数 returnSomething return 5 f
  • 使用ggplot2过度绘制分组箱线图中的平均点

    我有一个像这样的 ggplot2 分组箱线图 p lt qplot factor cyl mpg data mtcars geom boxplot fill factor gear 我想透支平均点 我试过这个 p stat summary
  • 如何在 iOS 中使用 3D 纹理?

    我找不到glTexImage3D OpenGL ES 2 0 中的 OpenGL 函数 那么如何使用 3D 纹理 例如 tga 文件 有人知道如何在 OpenGL ES 2 0 中使用 3D 纹理吗 OpenGL ES 1 x 和 2 x
  • 替换列表列表中的字符串

    我有一个字符串列表列表 例如 example string 1 a r ntest string string 1 test 2 another r ntest string 我想更换 r n 有一个空格 并去掉 在所有字符串的末尾 对于普
  • Haskell 库导入语法

    对于这个非常基本的问题抱歉 在 GHCi 中 两者之间有区别吗 import Library Name and m Library Name 它们看起来是等效的 但我认为使用替代语法是有原因的 你说得对import Module and m
  • 使用 XPath 和变量解析 lxml.html

    我有这个 HTML 片段 div h3 class toggle Table of Contents h3 div ul class toc li class level1 div class li a href section a div
  • JSP页面应该如何检查身份验证

    我是网络编程新手 我要求一种通用模式来执行诸如检查身份验证之类的操作 这是场景 该网站有一个供访问者登录的页面 它将获取用户名和加密密码并将其发送到服务器 然后从服务器获取错误代码 用户名 密码不匹配 或身份验证密钥 当用户登录成功时 我希
  • 当原始存储库不可用时,是否可以将默认存储库添加到 SLES?

    我有一个由不可用的人安装的 SLES 服务器 我查过 etc zypp repos d 有一个repo文件SUSE Linux Enterprise Server 11 SP4 11 4 4 1 109 repo 其内容是 SUSE Lin
  • Drive API 的 Google API OAuth 无法正常工作。出现错误:origin_mismatch

    我正在尝试运行 Google Drive 实时 API 的快速启动代码 我相信我做的一切都是对的 但我越来越 Error origin mismatch Request Details openid connect request true
  • 如何在 Mac OS X 上安装 libffi-dev

    我正在尝试在unix上实现micropython 这需要libffi dev 我是这样安装的brew install libffi dev 但好像没有找到libffi dev 有什么方法可以安装吗libffi dev在 Mac 操作系统上
  • 如何识别唯一用户?

    Question 如何确定用户是否是唯一的 我知道有很多方法可以使用 cookie 来执行此操作 但是不使用 cookie 的方法又如何呢 例如 转到城市词典并单击向上 向下投票按钮之一 即使您删除 cookie 并返回该页面 您也将无法对
  • ANTLRv4:非贪婪规则

    我正在阅读明确的 ANTLR4 参考文献 并对其中一个示例有疑问 第 76 页 STRING ESC fragment ESC 该规则与典型的 C 字符串匹配 包含在 其中可以包含 too 在我的预期中 规则STRING由于非贪婪构造 应该
  • 如何在 Mac OS X 上的 NSTextField 中启用拼写检查?

    我有一个 NSTextField 我想启用 键入时 拼写检查 当我加载应用程序时 我可以通过菜单栏 gt 编辑 gt 拼写和语法 gt 键入时检查拼写来执行此操作 我希望默认启用此选项 在 IB 中 我可以为 NSTextView 启用此功
  • Android AutoCompleteTextView 与自定义适配器过滤不起作用

    我有自定义 CustomerAdapter public class CustomerAdapter extends ArrayAdapter