AutoCompleteTextView 中的自定义过滤不起作用

2023-12-06

我正在扩展阵列适配器,如下所示,但我仍然得到旧结果,您能告诉我问题是什么吗?

public class Adaptor extends ArrayAdapter<String> implements Filterable{

        private ArrayList<String> items;

        public Adaptor(Context context, int textViewResourceId, String[] objects) {
            super(context, textViewResourceId, objects);
            items = new ArrayList<String>();
            for (int i = 0; i < objects.length ; i++)
                items.add(objects[i]);

        }


        @Override
        public int getCount() {
            return items.size();
        }


        @Override
        public String getItem(int position) {
            return items.get(position);
        }

        @Override
        public Filter getFilter() {
            Filter myFilter = new Filter(){

                @Override
                protected FilterResults performFiltering(CharSequence arg0) {
                    FilterResults rezultate = new FilterResults();
                    ArrayList<String> chestii = new ArrayList<String>();
                    for (int i = 0; i < items.size() ; i++)
                    {
                        String tmp = items.get(i).toUpperCase();
                        if (tmp.startsWith(arg0.toString().toUpperCase()))
                                chestii.add(items.get(i));

                    }
                    rezultate.count = chestii.size();
                    rezultate.values = chestii;
                    return rezultate;
                }

                @Override
                protected void publishResults(CharSequence constraint,
                        FilterResults results) {
                    if (results != null && results.count > 0)
                    {
                        notifyDataSetChanged();
                    }
                    else notifyDataSetInvalidated();

                }

            };
            return myFilter;
        }




    }

您的列表包含“items”中的项目,并且您不修改其中的项目,您必须从“items”中删除位置,然后调用notifyDataSetChange,要恢复最近的所有项目,您必须保存以前的项目

这工作正常:

/**
 * Adapter wrapper to represent list of dialogs
 * @author Ryazantsev Dmitry
 * @email [email protected] 2012
 */
public class FriendsAdapter extends ArrayAdapter<User>
{
    private final LayoutInflater inflater;
    private final ImageLoader il;
    private Context parentContext;
    private List<User> mData;
    private List<User> mOriginalData;
    public SimpleImageLoader sil;

    @Override
    public void add(User object)
    {
        if (mOriginalData != null)
            mOriginalData.add(object);
        else
            mData.add(object);
    }

    @Override
    public void remove(User object)
    {
        if (mOriginalData != null)
            mOriginalData.remove(object);
        else
            mData.remove(object);
    }

    @Override
    public int getCount()
    {
        return mData.size();
    }

    @Override
    public User getItem(int position)
    {
        return mData.get(position);
    }

    @Override
    public int getPosition(User item)
    {
        return mData.indexOf(item);
    }

    public FriendsAdapter(Context context, int textViewResourceId, List<User> objects)
    {
        super(context, textViewResourceId, objects);
        Log.v("refresh", context + " " + textViewResourceId + " " + objects);
        parentContext = context;
        inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        il = new ImageLoader(context);
        mData = objects;
        sil = new SimpleImageLoader(context, true, 64);
        sil.setOnUiThread(false);
    }

    /**
     * We have a custom view and need to organize it
     */
    @Override
    public View getView(final int position, View convertView, final ViewGroup parent)
    {

        ViewHolder holder;
        if (convertView == null)
        {
            convertView = inflater.inflate(R.layout.friends_list_row, null);
            holder = new ViewHolder();
            holder.name = (TextView) convertView.findViewById(R.id.friendName);
            holder.root = convertView.findViewById(R.id.root);
            holder.photo = (ImageView) convertView.findViewById(R.id.friendPhoto);
            holder.online = (ImageView) convertView.findViewById(R.id.online);
            convertView.setTag(holder);
        }
        else
            holder = (ViewHolder) convertView.getTag();

        User user = getItem(position);
        holder.online.setVisibility(user.isOnline() > 0 ? View.VISIBLE : View.GONE);
        if (user != null)
        {
            holder.name.setText(user.getFIO());
            holder.photo.setTag(user.getPhotoUrl());
            if (user.getPhotoBitmap() != null)
                holder.photo.setImageBitmap(user.getPhotoBitmap());
            else
            {
                holder.photo.setImageResource(R.drawable.contact_nophoto);
                sil.displayImageUserAttach(holder.photo, user.getPhotoUrl(), user, null, false, null);
            }
        }

        // parent.setVisibility(position % 2 == 0?View.GONE:View.VISIBLE);
        return convertView;
    }

    private static class ViewHolder
    {
        public TextView name;
        public ImageView photo;
        public View root;
        public View online;
    }

    @Override
    public Filter getFilter()
    {
        return new Filter()
        {
            @SuppressWarnings("unchecked")
            @Override
            protected void publishResults(CharSequence constraint, FilterResults results)
            {
                Log.v("filter", "filter finished");
                mData = (List<User>) results.values;
                if (results.count > 0)
                {
                    notifyDataSetChanged();
                }
                else
                {
                    notifyDataSetInvalidated();
                }
            }

            @Override
            protected FilterResults performFiltering(CharSequence constraint)
            {
                Log.v("filter", "filter perform");
                if (mOriginalData == null)
                    mOriginalData = new ArrayList<User>(mData);
                List<User> result;
                FilterResults r = new FilterResults();
                if (constraint == null || constraint.length() <= 0)
                    result = new ArrayList<User>(mOriginalData);
                else
                {
                    result = new ArrayList<User>();
                    for (int i = 0; i < mOriginalData.size(); i++)
                        if (constraint.length() > 0
                                && mOriginalData.get(i).getFIO().toLowerCase()
                                        .contains(constraint.toString().toLowerCase()))
                            result.add(mOriginalData.get(i));
                }
                r.values = result;
                r.count = result.size();
                return r;
            }
        };
    }

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

AutoCompleteTextView 中的自定义过滤不起作用 的相关文章

  • 如何使用 Android 版 Facebook 同步的联系人图片

    我的手机上安装了 Android 版 Facebook 它会自动将联系人列表中人员的 FB 个人资料图片同步到我的手机 我想在我访问的应用程序中使用这些图片ContactsContract PhoneLookup 我真的需要 Faceboo
  • Sqlite 查询检查 - 小于和大于

    return mDb query DATABASE TABLE new String KEY ROWID KEY LEVEL KEY LEVEL gt 3 lt 5 null null null null 我究竟做错了什么 它返回的值全部高
  • 相当于Android中的javax.swing.Timer

    有没有类似的东西javax swing Timer在安卓上 我知道如何创建自己的线程 但是有类似摆动计时器的东西吗 您可能正在寻找课程android os CountDownTimer http developer android com
  • Android 上通过 JSCH 的基本 SSH 连接

    作为来自此的用户question https stackoverflow com questions 14323661 simple ssh connect with jsch和这个tutorial http eridem net andr
  • 如何从静态快捷方式启动活动的现有实例

    我的应用程序中有一个活动 MainActivity 并且有一个静态快捷方式 指向 TempActivity 由于静态快捷方式将始终设置 FLAG ACTIVITY NEW TASK 和 FLAG ACTIVITY CLEAR TASK 因此
  • Android 上的硬币识别

    我目前正在开发一个 Android 应用程序 它能够拍摄硬币的现有图像 或者使用内置摄像头扫描单个硬币 非常像 Google Goggles 我正在使用 Android 版 OpenCV 我的问题如下 什么方法最适合使用 OpenCV 在
  • 将寻呼机视为列表视图行项目

    我有一个包含 20 行的列表视图 我想为列表视图中的每一行设置一个视图寻呼机 由于列表视图的行中的项目可能是一个或多个 并且我想使用视图分页器显示列表视图行项目 为此 我使用以下代码 将显示在列表视图行中的自定义布局 作为分页器项目
  • 从Asynctask返回结果

    如果我的 Android 应用程序中有这个后台工作文件 并且它从我的数据库获取数据 我如何将字符串 结果 传递给另一个类 后台工作人员连接到我的服务器 然后使用 php 连接到数据库 public class BackgroundWorke
  • 明文 HTTP 流量...不允许

    我的程序从用户那里获取一个 URL 因此它可以向互联网上的任何网站发出请求 我试图让这成为可能 我查找了有关 Android HTTP Cleartext 错误的所有答案 并做了这个 但它仍然不允许我连接我的测试本地 PHP 服务器 我在这
  • 注销时Firebase facebook按钮android身份验证

    我在我的 Android 应用程序中使用 firebase 并在 facebook SDK 中使用登录 我面临的唯一问题是 当我使用 facebook 登录然后注销时 facebook 登录按钮处于 注销 状态 当我单击它时 它会询问我是否
  • android studio 底部工具栏的“运行”选项卡消失了

    Android Studio 底部工具栏中曾经有一个 运行 选项卡 但该选项卡不再显示 怎么把它带回来 请检查下图以了解它消失之前的位置 Run 选项卡曾经位于 TODO 选项卡之前的红色圆圈中 查看 gt 工具窗口 gt 运行 Or us
  • 如何在不改变的情况下将字符串转换为字节?

    我需要一个解决方案将字符串转换为字节数组而不需要像这样进行更改 Input String s Test Output String s Test byte b Test 当我使用 s getBytes 那么回复是 B 428b76b8 但我
  • Android - 内容值覆盖现有行

    我正在尝试使用插入值ContentValues 我已将 5 个值插入到 5 列中 运行应用程序后 我只有最后一组值的行ContentValues 前四组未插入 ContentValues cv new ContentValues cv pu
  • 我可以在主线程上读取一个小 txt 文件,还是应该始终避免那里的 I/O?

    我正在读取一个小的 json 文件 其中有几行 它存储在用户设备的内部应用程序文件夹中 我所做的就是这样 JSONObject jsonObject new JSONObject MyUtils inputStreamToString My
  • 在 Android SDK 中通过单击按钮更改背景颜色不起作用

    我有一个简单的程序 可以在单击按钮后更改背景颜色 但它不起作用 public class ChangeBackgroundActivity extends Activity Called when the activity is first
  • Android 视图和视图组

    在安卓中ViewGroup继承自View A ViewGroup是一个容器 里面装有Views ViewGroup LinearLayout View TextView 为什么 Android 的人们将这种关系定义为Inheritance而
  • 在 TextView onTextChanged 上设置文本

    我有一个定义为类属性的文本视图 以便我可以在整个类中访问它 在 onCreate 方法中我执行以下操作 chars TextView findViewById R id chars chars setText 300 之后 public v
  • 在Android中提取视频帧

    我想知道是否可以从 Android 中正在运行的视频中提取帧 我需要定期提取帧并将其发送以进行进一步处理 有人能为我找到答案吗 Thanks Abhi 您可以使用媒体元数据检索器 http developer android com ref
  • 如何用 XML 制作双渐变(类似 iphone)

    如何使用 XML 制作这种可绘制渐变 我可以做一个从颜色 A 到颜色 B 的简单渐变 但我不知道如何在同一个可绘制对象中组合两个渐变 我终于找到了一个带有图层列表的解决方案 这对我来说已经足够好了
  • android-如何在谷歌地图上将标记的位置显示为地址

    我已经尝试过 commonsware googlemapsv2 教程 特别是在地图上拖动标记 但现在另一个问题困扰着我 问题是如何将标记的当前位置显示为地图下方或上方的地址 字符串 这是我使用的代码 public class MainAct

随机推荐