Android ExpandableListActivity和SimpleCursorTreeAdapter?

前端之家收集整理的这篇文章主要介绍了Android ExpandableListActivity和SimpleCursorTreeAdapter?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在为 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;
        }

}

}

希望会有用的;)

原文链接:https://www.f2er.com/android/310692.html

猜你在找的Android相关文章