如何将标题行添加到使用simplecursortreeadapter的expandablelistview的子视图列表中

时间:2017-03-09 05:08:38

标签: android header expandablelistview simplecursortreeadapter

我使用simplecursortreeadapter来填充expandablelistview,并希望在所有具有数据标题的子视图的顶部有一行。

  1. 第1组名称​​ [扩展]
    • 标题(日期,姓名,$)
    • 儿童1(2017年12月7日,乍得,50.00)
    • Child 2(08/11/2017,Mike,63.21)
  2. 第2组名称​​ [Expanded]
    • 标题(日期,姓名,$)
    • 儿童1(03/25/2017,Ken,23.97)
    • Child 2(01/25/2017,Will,101.11)
  3. 第3组 [Collapsed]
  4. 是否可以将包含3组标题文本(日期,名称,$)的文本视图仅在组展开时显示?由于SimpleCursorTreeAdapter处理将光标数据添加到视图中,因此我不确定如何向其添加行或如何实现此操作。这可能吗?

    编辑:这是我的适配器类:

    package com.example.myproject.michaelc.billme;
    
    import android.content.Context;
    import android.database.Cursor;
    import android.database.MatrixCursor;
    import android.database.MergeCursor;
    import android.support.v4.content.Loader;
    import android.util.Log;
    import android.widget.SimpleCursorTreeAdapter;
    
    import com.example.myproject.michaelc.billme.data.BillMeContract;
    
    import java.util.HashMap;
    
    public class PayeeCursorAdapter extends SimpleCursorTreeAdapter {
    
    private final String LOG_TAG = getClass().getSimpleName();
    private PayeeActivity mActivity;
    protected final HashMap<Integer, Integer> mGroupMap;
    
    // No cursor is added to the adapter so that it only runs when the CursorLoader runs, instead of every time the activity does
    public PayeeCursorAdapter(
            Context context,        // The activity where the adapter will be running
            int groupLayout,        // The .xml layout file for the group layout
            int childLayout,        // The .xml layout file for the child layout
            String[] groupFrom,     // String of column names in the cursor that is the data for each group item
            int[] groupTo,          // The ID of the views in the group layout that display the column from the groupFrom String[]
            String[] childrenFrom,  // String of column names in the cursor that is the data for each child item
            int[] childrenTo) {     // The ID of the views in the child layout that display the column from the childFrom String[]
    
        super(context, null, groupLayout, groupFrom, groupTo, childLayout, childrenFrom, childrenTo);
        mActivity = (PayeeActivity) context;
        mGroupMap = new HashMap<Integer, Integer>();
    }
    @Override
    protected Cursor getChildrenCursor(Cursor groupCursor) {
    
        int groupPos = groupCursor.getPosition();
        int groupId = groupCursor.getInt(groupCursor.getColumnIndex(BillMeContract.PayeeEntry._ID));
    
        Log.d(LOG_TAG, "getChildrenCursor() for groupPos " + groupPos);
        Log.d(LOG_TAG, "getChildrenCursor() for groupId " + groupId);
    
        mGroupMap.put(groupId, groupPos);
        Loader<Cursor> loader = mActivity.getSupportLoaderManager().getLoader(groupId);
    
        if(loader != null && !loader.isReset()) {
            mActivity.getSupportLoaderManager().restartLoader(groupId, null, mActivity);
        } else {
            mActivity.getSupportLoaderManager().initLoader(groupId, null, mActivity);
        }
        return null;
    }
    
    public HashMap<Integer, Integer> getGroupMap(){
        return mGroupMap;
    }
    }
    

1 个答案:

答案 0 :(得分:1)

是的,可以。

你也可以看到这个链接,希望你能得到你的解决方案。

http://www.worldbestlearningcenter.com/tips/Android-expandable-listview-header.htm

package android.widget.expandablelistview;

import android.os.Bundle;
import android.util.ExpandableListScenario;
import android.widget.Button;
import android.widget.ExpandableListView;

public class ExpandableListWithHeaders extends ExpandableListScenario {
private static final int[] sNumChildren = {1, 4, 3, 2, 6};
private static final int sNumOfHeadersAndFooters = 12;

@Override
protected void init(ExpandableParams params) {
    params.setStackFromBottom(false)
            .setStartingSelectionPosition(-1)
            .setNumChildren(sNumChildren)
            .setItemScreenSizeFactor(0.14)
            .setConnectAdapter(false);
}

@Override
protected void onCreate(Bundle icicle) {
    super.onCreate(icicle);

    final ExpandableListView expandableListView = getExpandableListView();
    expandableListView.setItemsCanFocus(true);

    for (int i = 0; i < sNumOfHeadersAndFooters; i++) {
        Button header = new Button(this);
        header.setText("Header View " + i);
        expandableListView.addHeaderView(header);
    }

    for (int i = 0; i < sNumOfHeadersAndFooters; i++) {
        Button footer = new Button(this);
        footer.setText("Footer View " + i);
        expandableListView.addFooterView(footer);
    }

    // Set adapter here AFTER we set header and footer views
    setAdapter(expandableListView);
}

/**
 * @return The number of headers (and the same number of footers)
 */
public int getNumOfHeadersAndFooters() {
    return sNumOfHeadersAndFooters;
}

}