Привет, я пытаюсь создать настраиваемый расширяемый список, но документация на адаптере очень запутанна и разнообразна. Как обычно, у меня есть hashmap для чтения массива json, а затем я помещаю его в список. Группа каждого ребенка отправляется внутри одного массива в ключе "GRUPO", на последней позиции. Может кто-нибудь, пожалуйста, дайте мне адаптацию к этому? Ниже приведен код из json:
if (tipopergunta.contentEquals("BOOLEANO") || tipopergunta.contentEquals("ESCMULTIPLA") || tipopergunta.contentEquals("ESCUNICA")){
HashMap<String,String> childdados = new HashMap<String,String>();
childdados.put("GRUPO", "Dados");
childdados.put("TIPOPERGUNTA", tipopergunta);
childdados.put("PERGUNTA", pergunta);
childdados.put("BREVEDESIGNACAO", brevedesc);
childdados.put("ESTADO",estado);
childdados.put("INSTRUCOES",instrucoes);
childdados.put("IDPERGUNTA",idpergunta);
Log.d("childdados",""+childdados.toString());
list.add(childdados);
}
if (tipopergunta.contentEquals("OPINIAO")){
HashMap<String,String> childdados = new HashMap<String,String>();
childdados.put("GRUPO", "Opinião");
childdados.put("TIPOPERGUNTA", tipopergunta);
childdados.put("PERGUNTA", pergunta);
childdados.put("BREVEDESIGNACAO", brevedesc);
childdados.put("ESTADO",estado);
childdados.put("INSTRUCOES",instrucoes);
childdados.put("IDPERGUNTA",idpergunta);
Log.d("opiniaolist",childdados.toString());
list.add(childdados);
}
if (tipopergunta.contentEquals("FOTOGRAFIA")){
HashMap<String,String> childdados = new HashMap<String,String>();
childdados.put("GRUPO", "Fotografia");
childdados.put("TIPOPERGUNTA", tipopergunta);
childdados.put("PERGUNTA", pergunta);
childdados.put("BREVEDESIGNACAO", brevedesc);
childdados.put("ESTADO",estado);
childdados.put("INSTRUCOES",instrucoes);
childdados.put("IDPERGUNTA",idpergunta);
Log.d("fotolist",childdados.toString());
list.add(childdados);
}
Это помогло мне понять расширяемый адаптер просмотра списка.
В расширенном списке просмотра у вас всегда есть родители и дети. Когда вы нажимаете на родителя, вы видите его детей.
Таким образом, адаптер нуждается в 3 вещах, в основном. Список родителей. Список детей (которые могут быть, например, массивом массивов), как рисовать детей и как рисовать родителей.
у вас должен быть массив родителей: String[] parents = {"parent1, "parent2");
и массив массивов childern, каждый из которых является String[] parents = {"parent1, "parent2");
элементом одного родителя.
String [][] children = {{child_A_Parent1, child_B_Parent1}, {child_A_Parent2, child_B_parent2}};
на методе getGroup вы должны вернуть родителя, которого хотите для данной строки:
public Object getGroup(int groupPosition) {
return parents[groupPosition];
}
по методу getChild вы должны вернуть нужный вам ребенок:
public Object getChild(int groupPosition, int childPosition) {
return children[groupPosition][childPosition];
}
на методах getChildView() вы должны раздуть нужный макет (например, xml с текстовым просмотром) и установить текст с соответствующим дочерним элементом. Обратите внимание: здесь вам не нужно беспокоиться о том, какой дочерний элемент уже передан по аргументам:
public View getChildView(int groupPosition, int childPosition,
boolean isLastChild, View convertView, ViewGroup parent) {
//inflate a the layout and get the text view
tv.setText(children[grouposition][childPosition];
..}
то же самое можно сказать и о родительском методе:
public View getGroupView(int groupPosition, boolean isExpanded,
View convertView, ViewGroup parent) {
//inflate a the layout and get the text view
tvParent.setText(parents[groupPosition];
}
вы можете установить все виды макетов для родителя и детей. Просто используйте надуватель для раздувания xml из папок макета. а затем используйте идентификатор ресурса, чтобы заполнить представления вашими виджетами.
надеюсь, это поможет вам адаптировать ваши данные к этому фрагменту.