検索

ホームページ  >  に質問  >  本文

android - ExpandableListAdapter中getChild和getGroup调用时间?

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

结果没有打出

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

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

黄舟黄舟2823日前739

全員に返信(1)返信します

  • 黄舟

    黄舟2017-04-17 14:45:50

    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
  • キャンセル返事