从String.xml数组中检索Spinner中项目的位置

时间:2012-09-19 22:30:40

标签: android android-spinner

我正在开发一个android项目并且有一个微调器,其中包含string.xml文件中的字符串数组中的项目。

在strings.xml中,我有以下数组

<string-array name="array_loginType">
        <item>Select Login Type</item>
        <item>Website</item>
        <item>App</item>
        <item>Other</item>
</string-array>

并且微调器包含以下XML

<Spinner  android:id="@+id/add_cboLoginType"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    android:prompt="@string/add_select_login_type"
    android:padding="4dp" 
    android:entries="@array/array_loginType"/>

在某些时候,用户可以从微调器中选择项目,并在提交时将项目保存在数据库中。然后我允许用户编辑细节,我试图根据从数据库中检索的项目在微调器内设置所选项目。即如果数据库中保存的项目显示Website,则将在微调器内选择Website

感谢您提供的任何帮助。

2 个答案:

答案 0 :(得分:0)

如果您知道数组中的哪个位置包含正确的选择,您可以使用Spinner.setSelection(); - 方法设置微调器以显示它。

在您的示例中,Website位于数组的第1位(第一个实际条目为数字0)。

因此,您的代码应如下所示:

// Declare the spinner object
Spinner mySpinner = (Spinner) findViewById(R.id.add_cboLoginType);
// Set the correct selection
mySpinner.setSelection(1, true);

第二个参数告诉微调器“动画”选择 - 所以它实际显示正确的选择,而不只是设置正确的值(如果设置为false或根本不包括,微调器将改变(所以任何取决于选择的东西都​​会按预期工作)但它仍然会出现在默认选择中。

答案 1 :(得分:0)

因此,您希望用户选择一个类型并将其与数据库中的其他一些数据一起保存,当用户尝试编辑您要编辑的数据屏幕以具有预选的微调器时,是否正确?

首先你需要一个OnItemClickListener。这会在用户选择内容时通知您:

Spinner spin = (Spinner) findViewById(R.id.add_cboLoginType);
spin.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    public void onItemClick(final AdapterView<?> parent, final View view, 
                            final int position, final long id) {
           // update the type field on the data object you are creating or editing
           // position is the type index
           obj.setTypeIndex(position);
        }
    }
);

这就是您看到更改的方式,现在要预先选择处于编辑模式:

//editMode boolean.. why not
if (editMode) {
     spin.setSelection(obj.getTypeIndex, true);
}