如何通过点击监听器传递SQLite对应ListView选中数据到UpdateActivity实现更新删除
问题根因
- 你当前仅将姓名和姓氏拼接为字符串存入列表,没有保存每条数据对应的数据库主键ID,后续编辑删除必须依赖主键才能定位到对应数据
- 跳转UpdateActivity时没有往Intent中携带需要传递的参数,因此目标页面无法拿到数据
解决步骤
1. 新增数据实体类(保存单条数据的完整信息)
public class User { private String id; private String name; private String surName; public User(String id, String name, String surName) { this.id = id; this.name = name; this.surName = surName; } // ListView展示内容时会自动调用该方法 @Override public String toString() { return name + " \t " + surName; } public String getId() { return id; } public String getName() { return name; } public String getSurName() { return surName; } }
2. 修改ListDataActivity的loadData逻辑
public void loadData() { // 将String列表替换为User实体列表 ArrayList<User> listData = new ArrayList<>(); Cursor cursor = databaseHelper.showAllData(); if (cursor.getCount() == 0) { Toast.makeText(getApplicationContext(), "no data is available", Toast.LENGTH_LONG).show(); } else { while (cursor.moveToNext()) { // 取数据库主键ID,默认查询时第一个字段为ID,下标从0开始,若你的查询字段顺序不同需要调整下标 String id = cursor.getString(0); String name = cursor.getString(1); String surName = cursor.getString(2); listData.add(new User(id, name, surName)); } } ArrayAdapter<User> adapter = new ArrayAdapter<User>(this, R.layout.list_item, R.id.textViewId, listData); listView.setAdapter(adapter); listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) { User selectedUser = (User) adapterView.getItemAtPosition(position); Toast.makeText(getApplicationContext(), "Selected Value : " + selectedUser.toString(), Toast.LENGTH_LONG).show(); Intent intent = new Intent(ListDataActivity.this,UpdateActivity.class); // 往Intent中塞入需要传递的参数,key需和后续取值保持一致 intent.putExtra("selected_id", selectedUser.getId()); intent.putExtra("name", selectedUser.getName()); intent.putExtra("surName", selectedUser.getSurName()); startActivity(intent); } }); }
3. 验证UpdateActivity取值逻辑
你当前UpdateActivity的取值代码已经匹配上述传入的key,不需要额外修改,运行后即可拿到对应数据。如果需要测试,可在取值后加代码验证:
// 取值完成后添加测试代码 Toast.makeText(this, "获取到数据:ID="+selectedID+", 姓名="+selectedName+", 姓氏="+receiveIntent.getStringExtra("surName"), Toast.LENGTH_SHORT).show();
注意事项
如果你的databaseHelper.showAllData()方法的查询字段顺序不是ID、name、surName,需要对应调整cursor.getString(下标)的参数,下标从0开始对应查询语句的字段顺序。
内容的提问来源于stack exchange,提问作者Ibnul Imtiaz
相关产品推荐
相关产品推荐

