Android ExpandableListActivity и SimpleCursorTreeAdapter?

Я пишу простое приложение для Android.

У меня есть 2 таблицы – один называется «grous», а другой – «group_items».

Я хочу использовать расширяемый список для отображения данных из обеих таблиц.

Каков наилучший способ сделать это? Можно ли сопоставлять данные с помощью SimpleCursorTreeAdapter? Я не нашел полезных примеров.

Я видел примеры создания расширяемых списков с помощью ArrayAdapter, поэтому сначала нужно преобразовать данные в массив, а затем создать с ним расширяемый список или есть способ сделать это напрямую?

Мне не нужен полный рабочий пример – просто совет о том, какой правильный и эффективный способ сделать это.

Леонтий

Solutions Collecting From Web of "Android ExpandableListActivity и SimpleCursorTreeAdapter?"

Я обнаружил, что самым простым решением было бы использовать SimpleCursorTreeAdapter. Вот пример кода (важные части):

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; } } } 

Надеюсь, это будет полезно;)