【问题标题】:How to filter string based on the searchView input如何根据 searchView 输入过滤字符串
【发布时间】:2015-11-16 00:44:41
【问题描述】:

我想为我的 searchView 创建建议。

我有一个 listView 和一个包含整个联系人列表的 Map。我创建了一个自定义适配器来填充 ListView。我还有一个 searchView 允许用户搜索特定的联系人。

现在我正在使用 OnQueryTextChange,但我不知道如何创建另一个 Map 以将其传递到适配器中,以便仅显示用户键入的名称。

我卡住了,因为我只想根据第一个字母添加联系人姓名。示例:如果用户键入“m”,那么我想创建一个所有联系人都以“m”开头的 Map,然后用户继续添加字母,并且 Map 应该过滤联系人,直到只有一个姓名。

代码如下:

@Override
        public boolean onQueryTextChange(String newText) {
            for (String name : mKeys) { // here Im looping the keys of my contact Map
                if (something) {
                   Map.put(name, contact.get(name));  // contact is the contact Map
                }
                createContactAdapter(Map);
                }
            }

            return false;
        }

感谢您的帮助

编辑

我更新的代码:

@Override
        public boolean onQueryTextChange(String newText) {
            Toast.makeText(ContactsActivity.this, newText, Toast.LENGTH_SHORT).show();
            for (String name : mKeys) {
                name = name.trim();
                if (name.startsWith(newText) && newText.length() > 0)  {
                    mFilteredMap.put(name, "00000000000"); // NPE here

                    if (mFilteredMap.size() > 1) {
                        createContactAdapter(mFilteredMap);
                    }
                }


            } 
            return false;

首先让我们只处理添加函数。

【问题讨论】:

  • 您所拥有的产品面临哪些问题?
  • if条件当然需要替换!
  • 当然可以?不确定这是否像您想象的那样明显。如果您没有 if,您不只是用所有键/值填充列表吗?
  • 我的意思是:如果(某事)

标签: java android listview adapter searchview


【解决方案1】:

我想我现在明白了。是……

if (name.startsWith(newText))

你在找什么?

String.startsWith()

这将查看键是否以搜索中的文本开头;如果是这样,请将其添加到地图中。

此时,您将拥有第一个字母的 所有 键的映射。如果你想过滤这张地图,你必须有一个empty 检查你正在处理哪一组键。然后你必须删除所有带有...的条目

if (! name.startsWith(newText)) { /* remove it */ }

这告诉您给定的键与搜索不匹配,然后您将其删除。

【讨论】:

  • @Agostinellli - 有帮助吗?
  • 是的,你帮了很多忙,但我还是有一些问题。我有一个 NPE。如何发布其他代码?
【解决方案2】:

您不必使用此地图,创建另一个地图,称为filteredMap,每次用户键入内容时,您都会清除filteredMap,迭代原始地图,并移动包含或以键入内容开头的项目文本,使用过滤映射创建适配器, 如上所述,使用 thw startWith 和 contains 仅移动正确的项目...

【讨论】:

  • 我认为,或者更确切地说,假设 OP 正在谈论一个单独的地图。我认为这是帖子暗示的,因为他们有一个联系地图和另一个。在我创建了已经“精简的地图”之后,我也不会继续查询 og.如果没有适当的照顾,这可能会严重浪费资源。您已经拥有您关心的键的子集。这肯定比不断检查你知道已经适合的那些更有效。
猜你喜欢
  • 2012-12-06
  • 2021-12-18
  • 2011-08-30
  • 1970-01-01
  • 1970-01-01
  • 2021-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多