0

次のようにカスタム ExpandableListView を作成したいと思います。

簡単なクイズゲームアプリを開発しています。

ゲームの最後に、質問とその回答を ExpandableListView に表示したいと思います (各質問は親であり、質問をクリックすると、その質問の回答である子が開きます)。

質問と回答は異なる色である必要があります (将来的には、別の画像で別のレイアウトになる可能性もあります): 間違った回答のある質問と間違った選択された回答は赤、正しい回答された質問と正しい選択された回答は緑、間違った回答は黒ユーザーは選択しませんでした。

そのために、単純なカスタム クラスを作成しました。

public class MyListItem {   
// the text of the item, that can either be a question or an answer
public String text;

// 0 = not chosen and wrong (BLACK)
// 1 = correct (GREEN)
// 2 = wrong (RED)
public int textColor = 0;
}

次に、 ExpandableListAdapter のクラスを作成しました

public class MyExpandableListAdapter extends BaseExpandableListAdapter { ... }

アプリケーションクラスから呼び出す

    [...]
    private HashMap<MyListItem, ArrayList<MyListItem>> listOfGameAnswers;
    listAdapter = new MyExpandableListAdapter(this, listOfGameAnswers);
    [...]

ただし、MyExpandableListAdapter を機能させることはできません (必要に応じてコードを提供できます)。

私のアプローチは正しいですか、それとも MyExpandableListAdapter に次のような入力が必要ですか

Map <文字列、その他のリスト> ?

それを実装するためのより良い方法はありますか?

PS: テキストの色を変更するためのこのディスカッションを参照し ました Expandable List の一部のヘッダーでテキストの色を変更する方法

どうもありがとう

更新: 解決策

シンプルでうまく機能するはずなので、以下の解決策を受け入れました。

とにかく、次のようにコードを修正することもできました。

@Override
public Object getGroup(int groupPosition) {

    ArrayList<MyListItem> myKeyList = new ArrayList<MyListItem>(listOfQuestions.keySet());

    return myKeyList.get(groupPosition);
}


@Override
public Object getChild(int groupPosition, int childPosition) {

    // get KEY
    MyListItem t = (MyListItem) getGroup(groupPosition);

    //get arraylist of my elements from key (which is an element!)
    ArrayList<MyListItem> mylist =  this.listOfQuestions.get(t);

    // return child
    return mylist.get(childPosition);

}
4

2 に答える 2