我正在尝试创建自定义光标适配器并将其附加到我的列表视图。
虽然我还没有创建文本框并在我的适配器中设置值, 当我尝试调用super(ctx,c);
时,我的代码当前抛出了运行时异常可能有什么不对?在网络和网络上搜索无法得到它。提前谢谢!
自定义光标适配器:
public class CustomCursorAdaptor extends CursorAdapter {
private Context context;
private int layout;
public CustomCursorAdaptor (Context ctx, int layout, Cursor c, String[] from, int[] to) {
super(ctx, c);
this.context = ctx;
this.layout = layout;
}
public View newView(Context context, Cursor cursor, ViewGroup parent) {
return(new View(context));
}
@Override
public void bindView(View v, Context context, Cursor c) {
}
}
和我的活动:
public class DynamicScrollView extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Context ctx=getBaseContext();
RelativeLayout newLayout=new RelativeLayout(ctx);
ListView lv=new ListView(ctx);
SQLiteDatabase db;
db = ctx.openOrCreateDatabase("TShow.db", SQLiteDatabase.OPEN_READONLY, null);
db.setVersion(1);
db.setLocale(Locale.getDefault());
db.setLockingEnabled(true);
Cursor cur = db.query("control", new String[] {"id"}, "parent_id=2", null, null, null, null);
CustomCursorAdaptor adapter = new CustomCursorAdaptor(ctx, lv.getId(), cur, new String[] {"id"}, new int[] {2});
lv.setAdapter(adapter);
newLayout.addView(lv);
setContentView(newLayout);
}
}
答案 0 :(得分:0)
我真的不太了解您在这里传递给CursorAdaptor
的基本上下文,但我知道通常您应该使用Activity
作为上下文。 Activity
是Context
的子类,如果你不知道的话。
所以,而不是:
new CustomCursorAdaptor(ctx, lv.getId(), cur, new String[] {"id"}, new int[] {2});
......你可以试试:
new CustomCursorAdaptor(this, lv.getId(), cur, new String[] {"id"}, new int[] {2});
答案 1 :(得分:0)
游标适配器期望有一个用作索引的列_id。我在select中添加了另一列作为_id,它工作正常!更新的代码:
Cursor cur = db.query("control", new String[] {"id as _id", "id"}, "parent_id=2", null, null, null, null);
我从异常描述中追溯到它说:列'_id'不存在
答案 2 :(得分:0)
感谢您提供有关ListView工作所需的_id列的黄金提示。
@dmg:您不能使用(本机)SQL'AS'语句命名您的_id列。只需添加'_id'列而不更改它。