Android的ExpandableListActivity和SimpleCursorTreeAdapter? [英] Android ExpandableListActivity and SimpleCursorTreeAdapter?

查看:268
本文介绍了Android的ExpandableListActivity和SimpleCursorTreeAdapter?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I'm writing a simple application for Android.

我有2表 - 一个叫grous和另一个名为group_items

I have 2 tables - one called 'grous' and another called 'group_items'.

我想用扩展列表从两个表显示数据。

I want to use expandable list to display data from both tables.

什么是做到这一点的最好方法是什么?是否有可能通过使用SimpleCursorTreeAdapter地图数据?我找不到任何有用的例子。

What is the best way to do it? Is it possible to map data by using SimpleCursorTreeAdapter? I couldn't find any usefull examples.

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

I saw the examples creating expandable lists using ArrayAdapter, so should I convert data to array first and then create an expandable list with it or there is the way to do it directly?

我并不需要一个完整的工作的例子 - 只是对什么是做正确的和最有效的方法是咨询

I don't need a full working example - just an advice on what is the correct and most efficient way to do it.

Leonti

推荐答案

我发现,最简单的办法是使用SimpleCursorTreeAdapter。 这里是code例子(重要部件):

I found that the simplest solution would be to use SimpleCursorTreeAdapter. Here is code example (important parts):

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

}

}

希望这将是有益的;)

Hope it will be useful ;)

这篇关于Android的ExpandableListActivity和SimpleCursorTreeAdapter?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆