我正在为
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 },// 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; } } }
希望会有用的;)