Android ExpandableListActivity and SimpleCursorTreeAdapter?

前端 未结 1 2104
我在风中等你
我在风中等你 2020-12-29 12:55

I\'m writing a simple application for Android.

I have 2 tables - one called \'grous\' and another called \'group_items\'.

I want to use expandable list to di

相关标签:
1条回答
  • 2020-12-29 13:08

    I found that the simplest solution would be to use SimpleCursorTreeAdapter. Here is code example (important parts):

    public class ExercisesList extends ExpandableListActivity {
    
    
    private ExcercisesDbAdapter mDbHelper; // your db adapter
    private Cursor mGroupsCursor; // cursor for list of groups (list top nodes)
    private int mGroupIdColumnIndex;
    private MyExpandableListAdapter mAdapter;
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
    
            mDbHelper = new ExcercisesDbAdapter(this);
            mDbHelper.open();
            fillData();
    }
    
    private void fillData() {
            mGroupsCursor = mDbHelper.fetchAllGroups(); // fills cursor with list of your top nodes - groups 
            startManagingCursor(mGroupsCursor);
    
            // Cache the ID column index
            mGroupIdColumnIndex = mGroupsCursor
                            .getColumnIndexOrThrow(ExcercisesDbAdapter.KEY_ROWID);
    
            // Set up our adapter
            mAdapter = new MyExpandableListAdapter(mGroupsCursor,this,
    
                            android.R.layout.simple_expandable_list_item_1,
                            R.layout.exercise_list_row,
    
                            new String[] { ExcercisesDbAdapter.KEY_TITLE }, // group title for group layouts
                            new int[] { android.R.id.text1 },
    
                            new String[] { ExcercisesDbAdapter.KEY_TITLE }, // exercise title for child layouts
                            new int[] { R.id.exercise_title });
    
            setListAdapter(mAdapter);
    }
    
    // extending SimpleCursorTreeAdapter
    public class MyExpandableListAdapter extends SimpleCursorTreeAdapter {
    
            public MyExpandableListAdapter(Cursor cursor, Context context,
                            int groupLayout, int childLayout, String[] groupFrom,
                            int[] groupTo, String[] childrenFrom, int[] childrenTo) {
                    super(context, cursor, groupLayout, groupFrom, groupTo,
                                    childLayout, childrenFrom, childrenTo);
            }
    
            // returns cursor with subitems for given group cursor
            @Override
            protected Cursor getChildrenCursor(Cursor groupCursor) {
                    Cursor exercisesCursor = mDbHelper
                                    .fetchExcercisesForGroup(groupCursor
                                                    .getLong(mGroupIdColumnIndex));
                    startManagingCursor(exercisesCursor);
                    return exercisesCursor;
            }
    
            // I needed to process click on click of the button on child item
            public View getChildView(final int groupPosition,
                            final int childPosition, boolean isLastChild, View convertView,
                            ViewGroup parent) {
                    View rowView = super.getChildView(groupPosition, childPosition,
                                    isLastChild, convertView, parent);
    
                    Button details = (Button) rowView.findViewById(R.id.view_button);
    
                    details.setOnClickListener(new OnClickListener() {
                            public void onClick(View v) {
    
                                    Cursor exerciseCursor = getChild(groupPosition, childPosition);
    
                                    Long exerciseId = exerciseCursor.getLong(exerciseCursor.getColumnIndex(ExcercisesDbAdapter.KEY_ROWID));
    
                                    Intent i = new Intent(ExercisesList.this, ExerciseView.class);
                                    i.putExtra(ExcercisesDbAdapter.KEY_ROWID, exerciseId);
                                    startActivity(i);
                            }
                    });
    
                    return rowView;
            }
    
    }
    
    }
    

    Hope it will be useful ;)

    0 讨论(0)
提交回复
热议问题