如何使用 SimpleAdapter 在微调器中设置选择?

Posted

技术标签:

【中文标题】如何使用 SimpleAdapter 在微调器中设置选择?【英文标题】:How to set selection in spinner with SimpleAdapter? 【发布时间】:2017-03-07 04:04:15 【问题描述】:

我正在从下面的代码中填充微调器,并且它的工作完美。当用户从微调器中选择任何值时,我将 stateCodeId 保存在 sqlite 中。现在我想要的是,当用户再次访问时,我想显示已经保存在 sqlite 中的 ID 中的选定值。如何显示微调器中选择的值?

public void fillStateData() 
        try 
            State_data = new ArrayList<Map<String, String>>();
            State_data.clear();
            Cursor cursor_State = db.rawQuery("SELECT nSerialNo as _id,cCodeName FROM CodeMaster where nCtgId = 6", null);

            int i = 0;
            if (cursor_State.moveToFirst()) 
                do 
                    Map<String, String> datanum = new HashMap<String, String>();
                    if (i == 0) 
                        datanum.put("nStateID", "0");
                        datanum.put("cStateName", "Select State");
                        State_data.add(datanum);

                        datanum = new HashMap<String, String>();
                        datanum.put("nStateID", cursor_State.getString(0));
                        datanum.put("cStateName", cursor_State.getString(1));
                        State_data.add(datanum);
                     else 
                        datanum.put("nStateID", cursor_State.getString(0));
                        datanum.put("cStateName", cursor_State.getString(1));
                        State_data.add(datanum);
                    
                    i += 1;
                 while (cursor_State.moveToNext());

            
            String[] fromwhere = "nStateID", "cStateName";
            int[] viewswhere = R.id.txtnStateID, R.id.txtcStateName;
            StateAdapter = new SimpleAdapter(getActivity(), State_data, R.layout.state_list_template, fromwhere, viewswhere);
            spnState.setAdapter(StateAdapter);
            cursor_State.close();
            spnState.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() 
                @Override
                public void onItemSelected(AdapterView<?> parent, View view, int position, long id) 

                    TextView stateId = (TextView) view.findViewById(R.id.txtnStateID);
                    stateCodeId = stateId.getText().toString();

                    fillDistrictData(stateCodeId);
                

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

                
            );
         catch (Exception e) 

            e.printStackTrace();

        
    

像这样我从 sqlite 获取 ID。

Cursor c = db.rawQuery("SELECT nStateId from MemberMaster where nCustID ="+SesPMbrID+"", null);

        c.moveToFirst();
        String state = c.getString(0);

【问题讨论】:

首先您必须从数据库中获取 ID,然后将数据库中的 ID 与所有 ID 的列表相匹配。最后,当您在列表中找到 ID 时,请注意位置和用户 spinner.setSelectio(position);在商店数据库 ID 上设置微调器。 我收到此错误 - java.lang.IndexOutOfBoundsException: Invalid index 9, size is 5 这意味着您的数据库包含 5 个 ID,您正在搜索 9,它不在列表中。 我的清单中有 5 项。现在我为我的微调器有两个文本视图的自定义布局会发生什么。一个用于 id,第二个用于名称。我将可见性转到 textview 哪个商店 id。 9 也来自 sqlite,它是任何项目的 id。我想显示 id 为 9 的名称 【参考方案1】:

使用

spinner.setSelection(position);

【讨论】:

感谢 Francois L。我正在填充来自 sqlite 的两列。 ID 列是隐藏的,只显示名称。我在 sqlite 中保存 id 并再次检索保存的 id。现在我想显示从 id 中选择的项目。

以上是关于如何使用 SimpleAdapter 在微调器中设置选择?的主要内容,如果未能解决你的问题,请参考以下文章

在android的微调器中设置视图文本在中心对齐

如何在微调器中更改单选按钮颜色

Android - 如何在一个活动中禁用多个微调器的特定项目

以编程方式设置微调器的选定项

如何将资产文件夹中的图像设置为列表视图?(使用 SimpleAdapter)

根据服务器响应在Android App中设置时区