You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android技术问题:如何将Spinner选中项的ID与名称分别填入两个不同的TextView

解决Spinner选中教师后同时显示姓名和ID的问题

嗨,刚从Windows Forms转Android确实会有点水土不服,Spinner和ComboBox的思路差异还挺明显的。你现在的核心问题是没把教师的ID和姓名绑定成一组数据,导致选中姓名后没法直接关联到对应的ID,还重复查数据库,既麻烦又低效。我来帮你调整下代码:

第一步:创建Teacher类封装数据

我们需要把每个教师的ID和姓名存成一个独立对象,这样就能把两个数据牢牢关联在一起,而不是分开丢进列表:

public class Teacher {
    private String id;
    private String name;

    public Teacher(String id, String name) {
        this.id = id;
        this.name = name;
    }

    public String getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    // 重写toString,让Spinner显示教师姓名
    @Override
    public String toString() {
        return name;
    }
}

第二步:修改fillSpinner方法

现在我们把查询到的每个教师都封装成Teacher对象,存到列表里,这样Spinner的每个选项都是完整的教师信息,选中时直接就能拿到ID和姓名:

public void fillSpinner() {
    Connection conn = connection();//connection to sql server database
    try {
        if (conn != null) {
            testText.setText("Connected to server!");
            String query = "SELECT id_Teacher, teacherName FROM Teachers";
            PreparedStatement pst = conn.prepareStatement(query);
            ResultSet rs = pst.executeQuery();
            
            // 存储Teacher对象的列表,替代原来的字符串列表
            ArrayList<Teacher> teacherList = new ArrayList<>();
            while (rs.next()) {
                String id = rs.getString("id_Teacher");
                String name = rs.getString("teacherName");
                teacherList.add(new Teacher(id, name));
            }

            // 用Teacher列表创建适配器
            ArrayAdapter<Teacher> adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, teacherList);
            spinner.setAdapter(adapter);

            spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
                @Override
                public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                    // 获取选中的Teacher对象
                    Teacher selectedTeacher = (Teacher) parent.getSelectedItem();
                    // 直接设置姓名和ID到对应TextView
                    testText.setText(selectedTeacher.getName());
                    txtId.setText(selectedTeacher.getId());
                }

                @Override
                public void onNothingSelected(AdapterView<?> parent) {
                    // 可选:设置默认提示
                    testText.setText("请选择教师");
                    txtId.setText("");
                }
            });
        } else {
            testText.setText("IP Address incorrect or \n not entered!");
        }
    } catch (Exception e) {
        e.printStackTrace();
        testText.setText("加载数据出错:" + e.getMessage());
    } finally {
        // 记得关闭数据库连接,避免资源泄漏
        try {
            if (conn != null) conn.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

第三步:删除fillIdTextView方法

现在完全不需要这个方法了——选中Spinner时直接从Teacher对象里拿ID,不用再重复查询数据库,既简化了代码,又提升了性能。

为什么原来的代码行不通?

  • 你之前把姓名和ID交替丢进同一个ArrayList,导致Spinner的选项是["张三", "1", "李四", "2"...],选中时根本分不清当前项是姓名还是ID,更没法对应关联。
  • fillIdTextView里重复查数据库,还错误地把ID和选中姓名混进列表,最后把ArrayAdapter转成字符串设置到txtId,这完全不是正确的取ID方式,还浪费了数据库资源。

这样修改后,选中Spinner里的教师,姓名会显示在testText,对应的ID会显示在txtId,完美匹配你的需求!

内容的提问来源于stack exchange,提问作者Rowen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.01 02:14:15