2012-11-08 60 views
0

我有一个由数据库填充的列表视图。该列表视图显示数据库的一些列。我希望能够点击listItem并显示一个显示整个记录的新活动。我试图通过传递一个意图之间的ID来做到这一点,但它不工作。该活动正在开始,但textViews没有被填充。我在这里包含了相关的代码片段。真的很感激一些帮助从列表项获取信息_Click

MainActivity

public class MainActivity extends ListActivity { 
    .... 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     ... 
     ... 
    } 

    private void fillList() { 
     ListView lv = getListView(); 

     Cursor c = db.getData(); 
     startManagingCursor(c); 

     CustomCursorAdapter adapter = new CustomCursorAdapter(getApplicationContext(), c); 
     lv.setAdapter(adapter); 

     lv.setOnItemClickListener(new OnItemClickListener() { 

      public void onItemClick(AdapterView<?> parent, View view, int position, long id){ 
       Intent k = new Intent(MainActivity.this, ProductDetails.class); 
       k.putExtra("item_id", id); 
       startActivity(k); 
      } 
     }); 
    } 

} 

ProdDetails

public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     db = new ProdDB(this); 
     setContentView(R.layout.product_details); 
     db.open(); 

     long id = getIntent().getLongExtra("item_id", 0); 

     Cursor cursor = db.getDetails(id); 
     while(cursor.moveToFirst()){ 
      tv1.setText(cursor.getString(cursor.getColumnIndex(ProdDB.KEY_PRODCODE))); 
      tv2.setText(cursor.getString(cursor.getColumnIndex(ProdDB.KEY_PRODNAME))); 
      ... 
      ... 
     } 
    } 
} 

DB.getDetails() - 从PRODDB

String[] columns = new String[] {KEY_ROWID, 
     KEY_PRODCODE, 
     KEY_PRODNAME, 
     KEY_PRODTYPE, 
     KEY_PRODCAT, 
     KEY_PRODPRICE, 
     KEY_PRODRRP, 
     KEY_PRODSUPPLIER, 
     KEY_NOTES}; 
return db.query(DB_TABLE, columns, KEY_ROWID + " = ?", new String[]{String.valueOf(id)}, null, null, null); 
+0

1.您在这两项活动中是否都有相同的“id”? 2.如果你这样做,检查函数获取数据。尝试记录游标值。 –

回答

2

您遇到问题,因为您正在使用while(cursor.moveToFirst()){。如果您必须使用while循环,则应该使用.moveToNext()来代替。否则,你可以取出moveToFirst的while循环,因为我假设你只需要一行。至于为什么,不要问我,我不能告诉你。

+0

非常感谢! – adohertyd