【问题标题】:Searching ListView that uses ListAdapater, not ArrayAdapter搜索使用 ListAdapter 而不是 ArrayAdapter 的 ListView
【发布时间】:2015-05-15 16:34:30
【问题描述】:

我有一个列表视图,它使用列表适配器作为适配器来填充列表视图。我在网上研究了一种添加搜索的方法,但他们都在使用 ArrayAdapters。由于我使用的是列表适配器,因此函数 getFilter() 不起作用。这是我的代码

inputSearch.addTextChangedListener(new TextWatcher() {

                    @Override
                    public void onTextChanged(CharSequence cs, int arg1, int arg2, int arg3) {
                        // When user changed the Text
                        adapter.getFilter().filter(cs);   

                    }

                    @Override
                    public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,
                            int arg3) {
                        // TODO Auto-generated method stub

                    }

                    @Override
                    public void afterTextChanged(Editable arg0) {
                        // TODO Auto-generated method stub                          
                    }

有人可以帮我找到一种替代方法吗?

【问题讨论】:

    标签: android listview search android-arrayadapter listadapter


    【解决方案1】:

    像这样在适配器中创建一个函数:

    public void filter(String charText) { charText = charText.toLowerCase(Locale.getDefault()); objectList.clear(); if (charText.length() == 0) { objectList.addAll(objectAsArraylist); } else { for (Object v : objectAsArraylist) { objectList.add(v); } } notifyDataSetChanged(); }

    其中objectList 是您传递给适配器的列表,objectAsArraylist 是传递给数组列表的objectList

    然后你可以在你的onTextChanged上调用这个方法:

    adapter.filter(text)

    【讨论】:

    • 我没有数组列表。我有一个 SimpleAdapter 和一个 ListAdapter。所以addAll()add() 函数不起作用
    • 您可以创建一个,将列表中所需的值传递给arraylist。
    • List<YourObject> objectAsArraylist = new ArrayList<>(); objectAsArraylist.addAll(objectList);
    • 我仍然对如何实现您的代码感到困惑
    • 你能在你的帖子中插入你的适配器代码以便我澄清吗?
    猜你喜欢
    • 1970-01-01
    • 2020-08-30
    • 2015-06-14
    • 1970-01-01
    • 1970-01-01
    • 2012-10-15
    • 1970-01-01
    • 2014-09-24
    • 1970-01-01
    相关资源
    最近更新 更多