次のようにカスタム 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);
}