1

こんにちは、カスタムの展開可能なリストビューを作成しようとしていますが、アダプターに関するドキュメントは非常に紛らわしく、多様です。いつものように、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);
                    }
4

1 に答える 1

1

これが、拡張可能なリストビューアダプタを理解するのに役立ちました。

拡張可能なリストビューでは、常に親と子がいます。親をクリックすると、その子が表示されます。

したがって、アダプタには主に3つのものが必要です。親のリスト。子のリスト(たとえば、配列の配列など)子の描画方法と、親の描画方法。

親の配列String[] parents = {"parent1, "parent2"); と、子の配列の配列が必要です。各配列は1つの親の子です。

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()メソッドでは、必要なレイアウト(たとえば、textviewを含む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を膨らませます。次に、リソースIDを使用して、ビューをウィジェットで埋めます。

これがデータをこのスニペットに適応させるのに役立つことを願っています。

于 2012-06-23T09:10:10.077 に答える