Android如何从Listview中获取clicked itemid并更新此行的另一列值
我正在制作一个小应用程序。它在MainActivity上有两个listview。 DB是SQLLite,具有树cloumns id(int)、person(text)、status(text)。 Firt listview将通过此查询显示数据库中的信息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字段“状态”
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();
}