单击时将ListView中的ROWID传递给新的Activity

时间:2015-04-07 20:39:03

标签: sql android-listview onitemclick rowid

这里的编程很新。我正在开发一个Android应用程序,允许用户创建和管理他在家里的食品数据库。目前,SQL数据库允许您创建新的数据库条目,其中每个条目由一个rowid,一个产品名称,您拥有的产品数量以及最终的到期日期组成。

然后使用数据库中的任何现有数据填充ListView,并设置此ListView的OnItemClickListener以处理单击事件,以便如果用户单击ListView中的行,则会将其发送到新的编辑活动。如果需要,他可以在这里编辑名称,金额和到期日期。

现在我正在尝试检索单击特定行以将其发送到下一个活动时的数据(名称,金额,日期),这是我到目前为止所获得的...

在SQL数据库中设置公共游标以获取特定rowid的所有KEYS:

public static final String[] ALL_KEYS = new String[] {KEY_ROWID, KEY_NAME, KEY_AMOUNT, KEY_DATE};

public Cursor getRow(long rowId) {
    String where = KEY_ROWID + "=" + rowId;
    Cursor c = ourDatabase.query(true,  DATABASE_TABLE, ALL_KEYS, where, null, null, null, null, null);
    if (c != null) {
        c.moveToFirst();
    }
    return c;
}

然后在使用ListView的活动中,我进行了以下设置以启动新的编辑活动:

private void listViewItemClick(){
    ListView ourList = (ListView) findViewById(R.id.lvProducts);
    ourList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view,
                int position, long id) {
            // TODO Auto-generated method stub

            Intent openProductsEdit = new Intent(Products.this,
                    ProductsEdit.class);
            startActivity(openProductsEdit);
            finish();

        }
    });
}

最后我想将编辑活动中的EditTexts设置为点击事件期间传递的数据:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    this.setContentView(R.layout.products_edit);

    initiate();

    Intent getProductName = getIntent();
    String productName = getProductName.getStringExtra("productName");
    etName.setText(productName);

    Intent getProductAmount = getIntent();
    String productAmount = getProductAmount.getStringExtra("productAmount");
    etAmount.setText(productName);

    Intent getProductDate = getIntent();
    String productDate = getProductDate.getStringExtra("productDate");
    etDate.setText(productName);

我一直在尝试通过我在SQL数据库中设置的光标检索单击行的特定数据,然后在onItemClick方法中使用openProductsEdit.putExtra传递它,但我似乎无法成功把两者连在一起。

非常感谢任何有关如何解决此问题的建议。

编辑:我通过编码我的onSetItemClickListener解决了我的问题

private void listViewItemClick(){
    final ListView ourList = (ListView) findViewById(R.id.lvProducts);
    ourList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view,
                int position, long id) {
            // TODO Auto-generated method stub

            Cursor cursor = (Cursor) ourList.getItemAtPosition(position);
            Intent openProductsEdit = new Intent(Products.this,
                    ProductsEdit.class);
            int rowid = cursor.getInt(0);
            String name = cursor.getString(1);
            String amount = cursor.getString(2);
            String date = cursor.getString(3);
            openProductsEdit.putExtra("rowid", rowid);
            openProductsEdit.putExtra("name", name);
            openProductsEdit.putExtra("amount", amount);
            openProductsEdit.putExtra("date", date);
            startActivity(openProductsEdit);

            finish();

        }
    });

这里cursor.getString(1)将字符串设置为所选行的第二列(在本例中为产品名称)。然后将其传递给编辑活动,其中数据被放入相应的EditTexts。

问题解决了! ;)

0 个答案:

没有答案