在ExpandableListAdapter的函数getChild()
和getGroup()
getChildrenCount()
添加Log
结果没有打出
而getChildId()
与getChildView()
getGroupId() getGroupView() getGroupCount()
都被调用 并打出了log
想问问未打出log的3个函数分别在什么时候进行调用以及没有打log的原因
黄舟2017-04-17 14:45:50
クリックして GroupItem を展開すると、getChildrenCount()
が呼び出され、このグループの子の数が返されます (配列の範囲外エラーを回避するため)。その後、アダプターは を呼び出します。 >getChildView( )
。
@Override
public int getChildrenCount(int groupPosition) {
Log.d(TAG, "getChildrenCount: groupPosition " + groupPosition);
戻り数;
}
ビューを埋めるには getChildView()
をオーバーライドする必要があるため、最初にデータを取得する必要があります。getChild()
の目的は、対応するデータを取得することです。アダプタの位置データに保存されます。
もちろん、アダプタの外部で子データ リストを管理している場合は、このリストから直接データを取得することもできます。
しかし、getChild()
のほうがわかりやすく見えませんか? getGroup()
にも同じことが当てはまります。getGroupView()
を実行してグループ ビューにデータを入力すると、対応するデータを簡単に取得できます。
private List mChildItems;
@オーバーライド
public View getChildView(int groupPosition, int childPosition, boolean isLastChild,
ビュー ConvertView、ViewGroup 親) {
Log.d(TAG, " getChildView: groupPosition" + groupPosition + ", childPosition " + childPosition);
// 次のように動作します:
HashMap child = (HashMap)getChild(groupPosition, childPosition);
Log.d(TAG, " getChild() からの子データ:" + child.get("サブ項目"));
// 次のようにすることもできます:
Log.d(TAG, " 私のリストの子データ:" + ((List)mChildItems.get(groupPosition)).get(childPosition));
ビューを返す。
}
@オーバーライド
public Object getChild(int groupPosition, int childPosition) {
Log.d(TAG, " getChild: groupPosition" + groupPosition + ", childPosition " + childPosition);
return super.getChild(groupPosition, childPosition);
}
一部のメソッド呼び出しのログ:
11-05 12:37:50.322: D/Exp(24030): getChildrenCount: groupPosition 1
11-05 12:37:50.325: D/Exp(24030): getChildView: groupPosition1、childPosition 0
11-05 12:37:50.325: D/Exp(24030): getChild: groupPosition1、childPosition 0
11-05 12:37:50.326: D/Exp(24030): getChild() からの子データ:サブ項目 0
11-05 12:37:50.326: D/Exp(24030): 私のリストの子データ:{サブ項目=サブ項目 0}
11-05 12:37:50.329: D/Exp(24030): getChildView: groupPosition1、childPosition 1
11-05 12:37:50.329: D/Exp(24030): getChild: groupPosition1、childPosition 1
11-05 12:37:50.329: D/Exp(24030): getChild() からの子データ:サブ項目 1
11-05 12:37:50.329: D/Exp(24030): 私のリストの子データ:{サブ項目=サブ項目 1}
11-05 12:37:50.331: D/Exp(24030): getChildView: groupPosition1、childPosition 2
11-05 12:37:50.331: D/Exp(24030): getChild: groupPosition1、childPosition 2
11-05 12:37:50.331: D/Exp(24030): getChild() からの子データ:サブ項目 2
11-05 12:37:50.331: D/Exp(24030): 私のリストの子データ:{Sub item=Sub item 2}
getChild()、getGroup()
と android.widget.Adapter の Object getItem(intposition)
は同じものです。「関連付けられたデータ項目を取得します」データセット内の指定された位置に置き換えます。』参照:
この質問に答えるプロジェクトが見つかりました: ANDROID の Expandable ListView
この答えは素晴らしいスタックオーバーフローです - Android クラス BaseAdapter のメソッド getItem および getItemId の目的は何ですか?
android.widget.ExpandableListAdapter ソース コード リンク
stackoverflow - Android ExpandableListView - チュートリアルを探しています