设置微调器的默认选择

Set default selection for a spinner

我知道这可能是一个简单的相对论问题,但我似乎忽略了答案。

在我的应用中,我有一个微调器供用户 select 他们居住的州。目前,该应用将专注于本地受众,因此我想设置默认值 select离子成为他们生活的状态。

我试过:

registration_screen.xml

<Spinner
    android:id="@+id/spinHomeState"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_column="1"
    android:entries="@array/state_list"
    android:prompt="@string/state_prompt"
    android:spinnerMode="dialog"/>

RegistrationScreen.java

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.registration_screen);

    Spinner HomeStateSpinner = (Spinner) findViewById(R.id.spinHomeState);
    HomeStateSpinner.setSelection('9');
}

但应用程序崩溃并显示以下 logcat 日志:

06-03 13:52:44.512
1736-1736/com.name.of.app E/AndroidRuntime﹕ FATAL EXCEPTION: main Process: com.hollywoodcert.soupserver.hollywoodcert, PID: 1736 java.lang.IndexOutOfBoundsException: Invalid index 57, size is 50 at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255) at java.util.Arrays$ArrayList.get(Arrays.java:66) at android.widget.ArrayAdapter.getItem(ArrayAdapter.java:337) at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:390) at android.widget.ArrayAdapter.getView(ArrayAdapter.java:362) at android.widget.Spinner.makeView(Spinner.java:592) at android.widget.Spinner.layout(Spinner.java:540) at android.widget.Spinner.onLayout(Spinner.java:502) at android.view.View.layout(View.java:14817) at android.view.ViewGroup.layout(ViewGroup.java:4631) at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1671) at android.widget.LinearLayout.layoutHorizontal(LinearLayout.java:1660) at android.widget.TableRow.onLayout(TableRow.java:123) at android.view.View.layout(View.java:14817) at android.view.ViewGroup.layout(ViewGroup.java:4631) at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1671) at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1525) at android.widget.TableLayout.onLayout(TableLayout.java:448) at android.view.View.layout(View.java:14817) at android.view.ViewGroup.layout(ViewGroup.java:4631) at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453) at android.widget.FrameLayout.onLayout(FrameLayout.java:388) at android.widget.ScrollView.onLayout(ScrollView.java:1468) at android.view.View.layout(View.java:14817) at android.view.ViewGroup.layout(ViewGroup.java:4631) at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453) at android.widget.FrameLayout.onLayout(FrameLayout.java:388) at android.view.View.layout(View.java:14817) at android.view.ViewGroup.layout(ViewGroup.java:4631) at android.support.v7.internal.widget.ActionBarOverlayLayout.onLayout(ActionBarOverlayLayout.java:493) at android.view.View.layout(View.java:14817) at android.view.ViewGroup.layout(ViewGroup.java:4631) at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453) at android.widget.FrameLayout.onLayout(FrameLayout.java:388) at android.view.View.layout(View.java:14817) at android.view.ViewGroup.layout(ViewGroup.java:4631) at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1671) at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1525) at android.widget.LinearLayout.onLayout(LinearLayout.java:1434) at android.view.View.layout(View.java:14817) at android.view.ViewGroup.layout(ViewGroup.java:4631) at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453) at android.widget.FrameLayout.onLayout(FrameLayout.java:388) at android.view.View.layout(View.java:14817) at android.view.ViewGroup.layout(ViewGroup.java:4631) at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:1987) at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1744) at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1000) at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5670) at android.view.Choreographer$CallbackRecord.run(Choreographer.java:761) at android.view.Choreographer.doCallbacks(Choreographer.java:574) at android.view.Choreographer.doFrame(Choreographer.java:544) at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:747) at android.os.Handler.handleCallback(Handler.java:733) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:136) at android.app.ActivityThread.main(ActivityThread.java:5017) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:515) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) at dalvik.system.NativeStart.main(Native Method)

如有任何建议,我将不胜感激。

使用这个:

String compareValue = "9";

        ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this,
                R.layout.spinner_layout, list);
        dataAdapter.setDropDownViewResource(R.layout.spinner_layout);
        rooms.setAdapter(dataAdapter);
        if (!compareValue.equals(null)) {
            int spinnerPostion = dataAdapter.getPosition(compareValue);
            HomeStateSpinner.setSelection(spinnerPostion);
            spinnerPostion = 0;
        }

如果 9 是上述解决方案中使用的字符串,否则 9 是您要设置选中的 index/position 然后只需使用:

HomeStateSpinner.setSelection(9);

这一定能解决您的问题。

根据 android 文档,Spinner 方法 setSelection 接收 intintboolean 参数。

在您的代码中,您的调用 HomeStateSpinner.setSelection('9'); 传递了一个 char 作为参数。另一件事是 java.lang.IndexOutOfBoundsException 抛出意味着您正在尝试访问微调器上设置的数组之外的位置。

我的建议是首先尝试像这样调用方法:

HomeStateSpinner.setSelection(9);

如果这不起作用,请尝试使用较低的值调用它,例如:

HomeStateSpinner.setSelection(2);