android - ExpandableListAdapter中getChild和getGroup调用时间?
黄舟
黄舟 2017-04-17 14:43:50
0
1
735

在ExpandableListAdapter的函数getChild()getGroup() getChildrenCount()添加Log

结果没有打出

getChildId()getChildView() getGroupId() getGroupView() getGroupCount()都被调用 并打出了log

想问问未打出log的3个函数分别在什么时候进行调用以及没有打log的原因

黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

全員に返信(1)
黄舟

getChildrenCount について

クリックして GroupItem を展開すると、getChildrenCount() が呼び出され、このグループの子の数が返されます (配列の範囲外エラーを回避するため)。その後、アダプターは を呼び出します。 >getChildView( )

@Override
public int getChildrenCount(int groupPosition) {
    Log.d(TAG, "getChildrenCount: groupPosition " + groupPosition);
    戻り数;
}

getChildView()、getChild()、getGroup() について

ビューを埋めるには 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}

基本的に、ExpandableListAdapter の getChild()、getGroup() と android.widget.Adapter の Object getItem(intposition) は同じものです。「関連付けられたデータ項目を取得します」データセット内の指定された位置に置き換えます。』

参照:

  • この質問に答えるプロジェクトが見つかりました: ANDROID の Expandable ListView

  • この答えは素晴らしいスタックオーバーフローです - Android クラス BaseAdapter のメソッド getItem および getItemId の目的は何ですか?

  • android.widget.ExpandableListAdapter ソース コード リンク

  • stackoverflow - Android ExpandableListView - チュートリアルを探しています

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート