我有listview元素,我正在尝试从列表视图实现基本搜索。
此函数创建它的元素:
listDataHeader = new ArrayList<String>();
listDataChild = new HashMap<String, List<String>>();
int counter = 0;
for (int i = 0; i<namesmails.size();i = i+2) {
//namesmails[0] == name && namesmails[1] == phone && namesmails[2] == email
String name = namesmails.get(i);
String mail = namesmails.get(i + 1);
String phone = returnNumber(namesphones,name);
listDataHeader.add(name);
List<String> currentName = new ArrayList<String>();
currentName.add(phone);
currentName.add(mail);
listDataChild.put(listDataHeader.get(counter), currentName);
counter += 1;
}
现在搜索我有查询+我知道输入成功(名称存在于列表中,但我不知道如何访问它。)
if (namesmails.contains(query)){
//I want to get the position of queryed name to expand-it. Currently
//i've set static number (20) to expand and select.
expListView.expandGroup(20)
expListView.setSelection(20);
}
如何通过添加名称访问Expandable ListView,以便我可以展开它并将其设置为选中状态?
答案 0 :(得分:0)
我得到了一位显然不是该网站用户的朋友的帮助,但如果将来有人需要帮助,这是可能的解决方案之一。这可能不是那里唯一的解决方案(因为这可能是一种直接用名字访问孩子的方法),但我提出了一种解决方法。
我在课程开头创建了一个名为onlynames的额外ArrayList,将其设置为全局变量。
在方法中:
listDataHeader = new ArrayList<String>();
listDataChild = new HashMap<String, List<String>>();
int counter = 0;
for (int i = 0; i<namesmails.size();i = i+2) {
//namesmails[0] == name && namesmails[1] == phone && namesmails[2] == email
String name = namesmails.get(i);
String mail = namesmails.get(i + 1);
String phone = returnNumber(namesphones,name);
namesonly.add(name);
listDataHeader.add(name);
List<String> currentName = new ArrayList<String>();
currentName.add(phone);
currentName.add(mail);
listDataChild.put(listDataHeader.get(counter), currentName);
counter += 1;
}
我添加了namesonly.add(name):现在,nameonly在名称上与listDataHeader具有相同的位置,所以我可以调用它:
if (namesmails.contains(query)){
int el = namesonly.indexOf(query);
expListView.expandGroup(el)
expListView.setSelection(el);
}
这有效:)。