You need to enable JavaScript to run this app. 如何通过点击监听器传递SQLite对应ListView选中数据到UpdateActivity实现更新删除
优惠活动
大模型
产品
解决方案
定价
更多

如何通过点击监听器传递SQLite对应ListView选中数据到UpdateActivity实现更新删除

问题根因

  1. 你当前仅将姓名和姓氏拼接为字符串存入列表,没有保存每条数据对应的数据库主键ID,后续编辑删除必须依赖主键才能定位到对应数据
  2. 跳转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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.09 16:27:01