2010-09-14 50 views
0

美好的一天,你能帮我看看这个代码,并告诉我什么是做错了。我有一个从光标适配器的列表视图,但是当我点击一行时,它返回它上面的行,而不是单击目标行。这导致如果你点击第一行,它会崩溃,出现“游标超出限制的异常”。但是当我在意图调用之前添加c.moveToFirst()并且点击第一行时,它什么都不做。请这里是代码:光标不返回当前行在android listview点击

public void onItemClick(AdapterView<?> parent, View view, int position, long rowId) { 

    c = adapter.retrieveRow(rowId); 

Intent edit = new Intent(this,Item.class); 
edit.putExtra(DBAdapter.KEY_ID, rowId); 
edit.putExtra(DBAdapter.NAME, c.getString(c.getColumnIndex(DBAdapter.NAME))); 
edit.putExtra(DBAdapter.START_DATE, c.getString(c.getColumnIndex(DBAdapter.START_DATE))); 
startActivityForResult(edit, ACTIVITY_EDIT); 
} 

这里是正在调用数据库的方法:

public Cursor retrieveRow(long rowId) { 
String[] resultColumns = new String[] {NAME,START_DATE}; 
      Cursor row = db.query(true,DATABASE_TABLE, resultColumns, KEY_ID +"=" +rowId, null, null, null, null,null); 
    if(row != null){ 
      row.moveToFirst(); 
    } 
    return row; 
    } 

我试图将其更改为一个OnListItemSelected(),但什么都没有发生,但它并没有返回任何东西all.I在游标适配器上使用新的视图和绑定视图方法。提前致谢。

回答

0

尝试替换c = adapter.retrieveRow(rowId);

with c = adapter.getItem(position);

并注释掉你的retrieveRow方法

+0

你好,我似乎得到一个错误,当我使用你的建议。该方法没有在我的listview中定义。我使用OnClickListener的列表视图,或者我应该使用OnItemSelected侦听器?感谢 – Rexx 2010-09-15 00:14:47

+0

意味着OnItemClickListener。对不起 – Rexx 2010-09-15 00:23:22

+0

它应该是OnItemClickListener()。但不管getItem是不是侦听器的方法,而是cursoradapter的方法 - 你确实使用了光标适配器吗? – 2010-09-15 14:26:39