CursorTreeAdapter - 返回Childview数据的Groupcursor部分

时间:2011-02-24 09:29:53

标签: android database cursor android-listview

我目前正在使用CursorTreeAdapter将Curser映射到Android中的ExpandableListView。

除了ListView中处理数据的方式外,一切正常。通常所有数据都在Cursor中,我给CursorTreeAdater的构造函数 - 甚至是Childview的daa。问题是Android期望getChildrenCursor函数接收ChildView的数据:

@Override
protected Cursor getChildrenCursor(Cursor groupCursor) {
    db.open();
    return db.getEpisode(groupCursor.getString(0));
}

在这里你已经看到了问题。我必须返回一个游标,但我不能仅仅“剪切”Cursor中负责特定Childview的一个条目。相反,我提出了一些问题,例如查询每个ChildView的数据库。这不仅是愚蠢的,因为数据已经存在(在组光标内),但它也很慢。

我的问题是,是否存在某种功能,只能克隆游标的特定条目或只返回一个条目而不是不断查询数据库。

也许我也不习惯使用CursorTreeAdapter,使用更通用的AdapterClass会很有用。

谢谢大家, 约翰内斯

2 个答案:

答案 0 :(得分:1)

我目前认为是我自己。

答案是从CursorTreeAdapter切换到BaseExpandableListAdapter

我之前有点害怕(不知道为什么),但现在它的工作就像一个魅力。

如果有人对代码感兴趣,我可以在这里发布。只需发表评论

答案 1 :(得分:0)

按要求提供我当前的源代码。它可能需要一些清理 - 但我希望你明白这一点。请询问您是否还有其他问题。

public class SeriesSeasonEpisodesAdapter extends BaseExpandableListAdapter {

    LayoutInflater mInflater;
    OnClickListener cbListener;
    long date;
    Cursor c;

    public SeriesSeasonEpisodesAdapter(Cursor cursor, Context context,
                    boolean autoRequery, OnClickListener cbListener) {

            this.cbListener = cbListener;

            mInflater = (LayoutInflater) context
                            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }

    @Override
    public boolean hasStableIds() {
            return true;
    }

    @Override
    public boolean isChildSelectable(int arg0, int arg1) {
            return false;
    }

    @Override
    public int getChildrenCount(int groupPosition) {
            return 1;
    }

    @Override
    public View getChildView(int groupPosition, int childPosition,
                    boolean isLastChild, View convertView, ViewGroup parent) {

            c.moveToPosition(groupPosition);

            % FILL convertView %

            return convertView;
    }


    @Override
    public Object getChild(int groupPosition, int childPosition) {
            return getGroup(groupPosition);
    }

    @Override
    public long getChildId(int groupPosition, int childPosition) {
            // TODO Auto-generated method stub
            return 0;
    }

    @Override
    public Object getGroup(int groupPosition) {
            c.moveToPosition(groupPosition);
            return c;
    }

    @Override
    public int getGroupCount() {
            if (c == null)
                    return 0;
            return c.getCount();
    }

    @Override
    public long getGroupId(int groupPosition) {
            // TODO Auto-generated method stub
            return 0;
    }

    @Override
    public View getGroupView(int groupPosition, boolean isExpanded,
                    View convertView, ViewGroup parent) {

            c.moveToPosition(groupPosition);

            % FILL convertView %

            return convertView;
    }

    public void swapCursor(Cursor c) {
            this.c = c;
            notifyDataSetChanged();
    }

}