删除记录后单击listview从数据库中获取行id

时间:2013-06-20 15:43:55

标签: android database listview

我创建了一个包含5列id,名称,日期,月份和年份的数据库。 它正在被完美地创建,我能够将它放在列表视图中。 现在的问题是,当我从数据库中删除一条记录。我不是 能够获得正确的行ID(删除或编辑)。因为列表视图不指向数据库,只显示列表视图中的字符串。

是否有一种方法,在我删除记录后,我仍然可以获得正确的行ID。 我希望在列表视图中单击时获取记录的行ID ..

获取数据库中使用的数据函数,将5个项目发送到显示活动

public ArrayList<String> getData() {

    String[] columns = new String[] { KEY_ROWID, KEY_NAME, KEY_DATE,
            KEY_MONTH, KEY_YEAR };

    Cursor c = db.query(DATABASE_TABLE, columns, null, null, null, null,
            null);
    String result = "";

    int iRow = c.getColumnIndex(KEY_ROWID);
    int iName = c.getColumnIndex(KEY_NAME);
    int iDate = c.getColumnIndex(KEY_DATE);
    int iMonth = c.getColumnIndex(KEY_MONTH);
    int iYear = c.getColumnIndex(KEY_YEAR);
    ArrayList<String> string_array = new ArrayList<String>();
    for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()) {
        result = c.getString(iRow) + " " + c.getString(iName) + "\t\t"
                + c.getString(iDate) + "\t\t" + c.getString(iMonth)
                + "\t\t" + c.getString(iYear) + "\n";
        string_array.add(result);

    }
    return string_array;
}

在显示活动中调用字符串数组

 ArrayList<String> data = db.getData();
    ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this,
            android.R.layout.simple_list_item_1, data);
    lv.setAdapter(arrayAdapter);
    lv.setOnItemClickListener(this);

删除数据库中第一个元素后的行ID

  public long getFROWID() {
    String[] columns = new String[] { KEY_ROWID, KEY_NAME, KEY_DATE,
            KEY_MONTH, KEY_YEAR };

    Cursor c = db.query(DATABASE_TABLE, columns, null, null, null, null,
            null);
    c.moveToFirst();
    int iRow = c.getColumnIndex(KEY_ROWID);
    ROWID = c.getString(iRow);
    long value = Long.parseLong(ROWID);
    return value;
}

数据库类中的函数,用于获取记录删除后的第一行ID

  @Override
public boolean onItemLongClick(AdapterView<?> parent, View listview,
        int position, long id) { 
    IMPID = db.getFROWID() + id;
    openContextMenu(lv);
    return true;
}

使用简单适配器进行更新

  String[] from = { BdayDatabase.KEY_NAME };
    int[] to = { R.id.item_name };

    List<HashMap<String, String>> listinfo = new ArrayList<HashMap<String, String>>();
    listinfo.clear();

        HashMap<String, String> hm = new HashMap<String, String>();
        hm.put("name" , BdayDatabase.KEY_NAME);
        listinfo.add(hm);


    SimpleAdapter adapter = new SimpleAdapter(this, listinfo, R.layout.item_layout, from, to);
    lv.setAdapter(adapter);

提前谢谢

1 个答案:

答案 0 :(得分:0)

为什么不让listview绑定到数据库而不是创建数组列表???

这样您需要做的就是将主键设置为_id,以便正确绑定到列表视图。然后,当您单击某行时,long id变量是您在数据库中单击的项的ID