我目前正在使用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会很有用。
谢谢大家, 约翰内斯
答案 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();
}
}