我想为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;
首先让我们只处理添加功能。
答案 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
你在寻找什么?
这将查看密钥是否以搜索中的文本开头;如果是这样,请将其添加到地图中。
此时,您的第一个字母的所有键的地图。如果您要过滤此地图,则必须进行if (name.startsWith(newText))
检查才能查看您正在处理哪些密钥。然后,您必须删除所有条目...
empty
这告诉您给定的密钥不会匹配搜索,然后将其删除。
答案 1 :(得分:0)
您不必使用此地图,创建另一个地图调用filterMap,每次用户输入内容时,您清除filteredMap,迭代原始地图,并移动包含或开始的项目键入的文本,使用filteredMap创建适配器, 使用startWith和contains来移动正确的项目,如上所述......