Android:将 id 和 name 从微调器中的选定项目放入两个不同的 textViews

Posted

技术标签:

【中文标题】Android:将 id 和 name 从微调器中的选定项目放入两个不同的 textViews【英文标题】:Android: Place id and name from selected item in spinner into two different textViews 【发布时间】:2021-12-30 09:02:54 【问题描述】:

我对 android 完全陌生,但曾在带有组合框的 windows 窗体中工作。然而,微调器是 保龄球! 我有一个找不到答案的问题,现在作为最后的手段,我必须向您求助。 我正在构建一个简单的 android 应用程序,它可以将数据读取和写入 SQL 服务器数据库。 从数据库中,我需要通过查询将教师的姓名和身份证号加载到微调器中。 然后必须将微调器中所选教师的姓名放在 textView 中(textView1 命名为脚本中的测试文本)。 有了以上,我就没有问题了。

我的问题是我想将微调器中所选教师的 id 号放入第二个 textView 中。 总结一下:我在微调器中选择了一位老师,老师的姓名和 ID 出现在两个单独的文本视图中。

我包括包含我当前努力的方法。

任何帮助都可以。

//用老师的名字填充微调器,并将名字放在 textView(testText) 公共 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();

            ArrayList<String> data = new ArrayList<String>();

            while (rs.next()) 
               
                String name = rs.getString("teacherName");
                final String idTeacher = rs.getString("id_Teacher");
            
                data.add(name);
                data.add(idTeacher);


                ArrayAdapter array = new ArrayAdapter(this, android.R.layout.simple_list_item_1, data);

                spinner.setAdapter(array);
               
                spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() 
                    @Override
                    public void onItemSelected(AdapterView<?> parent, View view, int position, long id) 

                       testText.setText(spinner.getSelectedItem().toString());//place name in textview

                     fillIdTextView();

                    

                    @Override
                    public void onNothingSelected(AdapterView<?> parent) 

                    
                );

            


         else 
            testText.setText("IP Address incorrect or \n not entered!");
        
    
    catch (Exception e) 
        e.printStackTrace();
    


//Fill textView(txtId) with the id_Teacher of the nameTeacher selected in the spinner.
public void fillIdTextView()
    Connection conn = connection();

    try 
        if (conn != null) 
            String query = "SELECT id_Teacher FROM Teachers";
            PreparedStatement pst1 = conn.prepareStatement(query);
            ResultSet rs = pst1.executeQuery();

            ArrayList<String> dataId = new ArrayList<String>();
        
            while (rs.next()) 
                
                String idTeacher = rs.getString("id_Teacher");

                dataId.add(idTeacher);
                dataId.add(spinner.getSelectedItem().toString());


                ArrayAdapter array = new ArrayAdapter(this, android.R.layout.simple_list_item_1, dataId);

                txtId.setText(array.toString());//place the id of the selected teacher in textview.
             //  spinnerId.setAdapter(array);//place id in second spinner
               


            


         else 
            testText.setText("IP Address incorrect or \n not entered!");
        
    
    catch (Exception e) 
        e.printStackTrace();
    


'''

【问题讨论】:

【参考方案1】:

那是因为这个部分:

   dataId.add(idTeacher);
   dataId.add(spinner.getSelectedItem().toString());

您的适配器将它们视为列表中的两个不同项目,这就是它们显示在两个不同文本视图中的原因。

如果您希望它们显示在同一个文本视图中,您必须创建一个名为 Teacher 的类,其中包含两个字段(名称、id)。然后创建一个教师类型的对象列表并将其传递给您的适配器。这就是它如何理解他们实际上是一个人/项目而不是两个。

【讨论】:

以上是关于Android:将 id 和 name 从微调器中的选定项目放入两个不同的 textViews的主要内容,如果未能解决你的问题,请参考以下文章

在我的微调器 POJO 中,我有 id 和 name。所以在按钮单击时,我想在 kotlin android 中发送我的微调器 ID 而不是名称

如何从微调器中检索数据并进行处理?

Android微调器中的重复项目

如何在单击按钮上从微调器中删除所选项目?

从微调器中移除焦点

从 PHP MySql 填充 Android 微调器