我正在为Android编写一个简单的应用程序.
我有2个表 - 一个叫做'grous',另一个叫'group_items'.
我想使用可扩展列表来显示两个表中的数据.
最好的方法是什么?是否可以使用SimpleCursorTreeAdapter映射数据?我找不到任何有用的例子.
我看到使用ArrayAdapter创建可扩展列表的示例,所以我应该首先将数据转换为数组,然后使用它创建可扩展列表,还是可以直接执行此操作?
我不需要一个完整的工作示例 - 只是建议什么是正确和最有效的方法.
Leonti
我发现最简单的解决方案是使用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; } } }
希望它会有用;)