如何根据searchView输入过滤字符串

时间:2015-08-22 00:21:34

标签: java android listview adapter searchview

我想为searchView创建建议。

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

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

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

以下是代码:

@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;

首先让我们只处理添加功能。

2 个答案:

答案 0 :(得分:1)

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

example data Gene Treatment Time replicate expression gene1 10°C 3 1 0.125132183 gene1 10°C 3 2 0.107514407 gene1 10°C 3 3 0.09159049 gene2 10°C 3 1 0.060833328 gene2 10°C 3 2 0.055756875 gene2 10°C 3 3 0.049362816 gene1 10°C 6 1 0.332224339 gene1 10°C 6 2 0.325728753 gene1 10°C 6 3 0.375734111 gene2 10°C 6 1 0.222602764 gene2 10°C 6 2 0.208011959 gene2 10°C 6 3 0.285778295 gene1 18°C 3 1 0.411072664 gene1 18°C 3 2 0.326374874 gene1 18°C 3 3 0.353573578 gene2 18°C 3 1 0.458390686 gene2 18°C 3 2 0.384614136 gene2 18°C 3 3 0.451072275 gene1 18°C 6 1 0.333687974 gene1 18°C 6 2 0.349928428 gene1 18°C 6 3 0.271766252 gene2 18°C 6 1 0.433498867 gene2 18°C 6 2 0.645699271 gene2 18°C 6 3 0.444076527

你在寻找什么?

String.startsWith()

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

此时,您的第一个字母的所有键的地图。如果您要过滤此地图,则必须进行if (name.startsWith(newText))检查才能查看您正在处理哪些密钥。然后,您必须删除所有条目...

empty

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

答案 1 :(得分:0)

您不必使用此地图,创建另一个地图调用filterMap,每次用户输入内容时,您清除filteredMap,迭代原始地图,并移动包含或开始的项目键入的文本,使用filteredMap创建适配器, 使用startWith和contains来移动正确的项目,如上所述......