Android如何从Listview中获取clicked itemid并更新此行的另一列值

Android如何从Listview中获取clicked itemid并更新此行的另一列值,android,sqlite,listview,Android,Sqlite,Listview,我正在制作一个小应用程序。它在MainActivity上有两个listview。 DB是SQLLite,具有树cloumns id(int)、person(text)、status(text)。 Firt listview将通过此查询显示数据库中的信息 select * from DB where status=B 下一个ListView将显示status=A的信息 1级状态=b | 2级状态=a 第1人|第2人 第3人|第4人 当我在项目上单击lv2时,单击的lv2字段“状态”

我正在制作一个小应用程序。它在MainActivity上有两个listview。 DB是SQLLite,具有树cloumns id(int)、person(text)、status(text)。 Firt listview将通过此查询显示数据库中的信息

    select * from DB where status=B
下一个ListView将显示status=A的信息

1级状态=b | 2级状态=a


第1人|第2人


第3人|第4人


当我在项目上单击lv2时,单击的lv2字段“状态”的值必须更改为“b”。 但我不能为db编写正确的查询

public void changeUser(){
    db = this.getWritableDatabase();
    ContentValues values = new ContentValues();

    values.put(KEY_STATUS, "B");

    db.update(TABLE_ORDER, values, null, null);
    db.close();

}
谢谢

这是我的密码

 lvB = (ListView)findViewById(R.id.lvB);
    listClientB();

    lvA = (ListView)findViewById(R.id.lvA);
    listClientA();

    lvA.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {

            User user = (User)adapterView.getAdapter().getItem(i);

            int id = user.get_id();

            if (user.getStatus().contains("A")){
                dbHelper.changeUser();
            }

            Toast.makeText(getApplicationContext(), id + "-NUMBER id", Toast.LENGTH_LONG).show();
            Log.d(String.valueOf(user.get_id()), "-NUMBER id");

            listClientA();

            Log.d(user.getStatus(), "Pressed");
        }
    });

}

private void listClientA(){
    list = dbHelper.allUsersA();
    klientStatusAdapter = new KlientStatusAdapter(MainActivity.this, list);
    lvA.setAdapter(klientStatusAdapter);
    lvA.setTextFilterEnabled(true);
}

private void listClientB(){
    list = dbHelper.allUsersB();
    klientStatusAdapter = new KlientStatusAdapter(MainActivity.this, list);
    lvB.setAdapter(klientStatusAdapter);
    lvB.setTextFilterEnabled(true);
}

}

如果仔细查看
SQLiteDatabase.update()
方法,您将看到它被声明为

int update (String table, 
            ContentValues values, 
            String whereClause, 
            String[] whereArgs)
请注意最后两个参数。以下是选择要更新的行的方式。例如,可以指定仅更新具有给定id的行:

public void changeUser(int userId){
    db = this.getWritableDatabase();
    ContentValues values = new ContentValues();

    values.put(KEY_STATUS, "B");

    String whereClause = "_id = ?";
    String where = new String[] {Integer.toString(userId)};

    db.update(TABLE_ORDER, values, whereClause, where);
    db.close();

}
这里我假设您使用传统的列名
\u id
。当然,如果您有不同的列名,可以根据需要更改此选项


请注意,现在需要将参数传递给
changeUser()
。然而,你还没有展示你现在如何称呼它,也没有展示你现在在哪里称呼它,所以我无法提供任何关于如何改变它的建议

请给出完整的代码示例。记住,在Java中,所有方法都必须在一个类中。您还应该显示在何处创建任何
OnClickListener
s。
public class User {

private int _id;
private String clientName;
private String cleintOrderedFood;
private String status = "A";

public User() {
}

public User(int _id, String clientName, String cleintOrderedFood) {
    this._id = _id;
    this.clientName = clientName;
    this.cleintOrderedFood = cleintOrderedFood;
}

public User(int _id, String clientName, String cleintOrderedFood, String status) {
    this._id = _id;
    this.clientName = clientName;
    this.cleintOrderedFood = cleintOrderedFood;
    this.status = status;
}

public int get_id() {
    return _id;
}

public void set_id(int _id) {
    this._id = _id;
}

public String getClientName() {
    return clientName;
}

public void setClientName(String clientName) {
    this.clientName = clientName;
}

public String getCleintOrderedFood() {
    return cleintOrderedFood;
}

public void setCleintOrderedFood(String cleintOrderedFood) {
    this.cleintOrderedFood = cleintOrderedFood;
}

public String getStatus() {
    return status;
}

public void setStatus(String status) {
    this.status = status;
}
int update (String table, 
            ContentValues values, 
            String whereClause, 
            String[] whereArgs)
public void changeUser(int userId){
    db = this.getWritableDatabase();
    ContentValues values = new ContentValues();

    values.put(KEY_STATUS, "B");

    String whereClause = "_id = ?";
    String where = new String[] {Integer.toString(userId)};

    db.update(TABLE_ORDER, values, whereClause, where);
    db.close();

}