расширяемый список просмотра Android JSON

1

Привет, я пытаюсь создать настраиваемый расширяемый список, но документация на адаптере очень запутанна и разнообразна. Как обычно, у меня есть 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);
                    }
Теги:
expandablelistview
expandablelistadapter

1 ответ

1
Лучший ответ

Это помогло мне понять расширяемый адаптер просмотра списка.

В расширенном списке просмотра у вас всегда есть родители и дети. Когда вы нажимаете на родителя, вы видите его детей.

Таким образом, адаптер нуждается в 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 из папок макета. а затем используйте идентификатор ресурса, чтобы заполнить представления вашими виджетами.

надеюсь, это поможет вам адаптировать ваши данные к этому фрагменту.

  • 0
    все еще я не могу понять. Я поставил здесь то, что я получаю на адаптере изображения, я понятия не имею, как реализовать это на адаптере.
  • 1
    Я пытался объяснить каждый метод. Посмотрите, поможет ли это вам.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню