Android的ExpandableListActivity和SimpleCursorTreeAdapter?

我正在为Android编写一个简单的应用程序。

我有两张桌子 – 一张叫做“grous”,另一张叫做“group_items”。

我想使用可扩展列表来显示来自两个表的数据。

什么是最好的办法呢? 是否可以通过使用SimpleCursorTreeAdapter映射数据? 我找不到任何有用的例子。

我看到使用ArrayAdapter创build可扩展列表的例子,所以我应该先将数据转换为数组,然后创build一个可扩展的列表,或者有办法直接做到这一点?

我不需要一个完整的工作示例 – 只是build议什么是正确和最有效的方法来做到这一点。

Leonti

Solutions Collecting From Web of "Android的ExpandableListActivity和SimpleCursorTreeAdapter?"

我发现最简单的解决scheme是使用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; } } } 

希望它会有用;)