adohertyd
adohertyd

Reputation: 2689

Get information from a listItem onClick with _id

I have a listview populated by a database. The listview displays some columns of the database. I want to be able to click the listItem and display a new activity that shows that whole record. I am trying to do this by passing the id between through an intent but it is not working. The activity is starting but the textViews aren't being populated. I have included the relevent code snippets here. Would really appreciate some help

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() - from 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);

Upvotes: 0

Views: 103

Answers (1)

mango
mango

Reputation: 5636

you're having issue cause you're using while(cursor.moveToFirst()){. if you must use the while loop then you should use the .moveToNext() instead. Otherwise, you can just take out the while loop for moveToFirst since i'm assuming you only need the one row. as for why, don't ask me, i couldn't tell you.

Upvotes: 2

Related Questions