【问题标题】:Set default selection for a spinner设置微调器的默认选择
【发布时间】:2015-08-18 02:23:06
【问题描述】:

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

在我的应用程序中,我有一个微调器供用户选择他们居住的州。目前,该应用程序将专注于本地受众,因此我想将默认选择设置为他们居住的州在。

我试过了:

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﹕ 致命例外:主要 进程:com.hollywoodcert.soupserver.hollywoodcert,PID:1736 java.lang.IndexOutOfBoundsException:索引 57 无效,大小为 50 在 java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255) 在 java.util.Arrays$ArrayList.get(Arrays.java:66) 在 android.widget.ArrayAdapter.getItem(ArrayAdapter.java:337) 在 android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:390) 在 android.widget.ArrayAdapter.getView(ArrayAdapter.java:362) 在 android.widget.Spinner.makeView(Spinner.java:592) 在 android.widget.Spinner.layout(Spinner.java:540) 在 android.widget.Spinner.onLayout(Spinner.java:502) 在 android.view.View.layout(View.java:14817) 在 android.view.ViewGroup.layout(ViewGroup.java:4631) 在 android.widget.LinearLayout.setChildFrame(LinearLayout.java:1671) 在 android.widget.LinearLayout.layoutHorizo​​ntal(LinearLayout.java:1660) 在 android.widget.TableRow.onLayout(TableRow.java:123) 在 android.view.View.layout(View.java:14817) 在 android.view.ViewGroup.layout(ViewGroup.java:4631) 在 android.widget.LinearLayout.setChildFrame(LinearLayout.java:1671) 在 android.widget.LinearLayout.layoutVertical(LinearLayout.java:1525) 在 android.widget.TableLayout.onLayout(TableLayout.java:448) 在 android.view.View.layout(View.java:14817) 在 android.view.ViewGroup.layout(ViewGroup.java:4631) 在 android.widget.FrameLayout.layoutChildren(FrameLayout.java:453) 在 android.widget.FrameLayout.onLayout(FrameLayout.java:388) 在 android.widget.ScrollView.onLayout(ScrollView.java:1468) 在 android.view.View.layout(View.java:14817) 在 android.view.ViewGroup.layout(ViewGroup.java:4631) 在 android.widget.FrameLayout.layoutChildren(FrameLayout.java:453) 在 android.widget.FrameLayout.onLayout(FrameLayout.java:388) 在 android.view.View.layout(View.java:14817) 在 android.view.ViewGroup.layout(ViewGroup.java:4631) 在 android.support.v7.internal.widget.ActionBarOverlayLayout.onLayout(ActionBarOverlayLayout.java:493) 在 android.view.View.layout(View.java:14817) 在 android.view.ViewGroup.layout(ViewGroup.java:4631) 在 android.widget.FrameLayout.layoutChildren(FrameLayout.java:453) 在 android.widget.FrameLayout.onLayout(FrameLayout.java:388) 在 android.view.View.layout(View.java:14817) 在 android.view.ViewGroup.layout(ViewGroup.java:4631) 在 android.widget.LinearLayout.setChildFrame(LinearLayout.java:1671) 在 android.widget.LinearLayout.layoutVertical(LinearLayout.java:1525) 在 android.widget.LinearLayout.onLayout(LinearLayout.java:1434) 在 android.view.View.layout(View.java:14817) 在 android.view.ViewGroup.layout(ViewGroup.java:4631) 在 android.widget.FrameLayout.layoutChildren(FrameLayout.java:453) 在 android.widget.FrameLayout.onLayout(FrameLayout.java:388) 在 android.view.View.layout(View.java:14817) 在 android.view.ViewGroup.layout(ViewGroup.java:4631) 在 android.view.ViewRootImpl.performLayout(ViewRootImpl.java:1987) 在 android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1744) 在 android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1000) 在 android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5670) 在 android.view.Choreographer$CallbackRecord.run(Choreographer.java:761) 在 android.view.Choreographer.doCallbacks(Choreographer.java:574) 在 android.view.Choreographer.doFrame(Choreographer.java:544) 在 android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:747) 在 android.os.Handler.handleCallback(Handler.java:733) 在 android.os.Handler.dispatchMessage(Handler.java:95) 在 android.os.Looper.loop(Looper.java:136) 在 android.app.ActivityThread.main(ActivityThread.java:5017) 在 java.lang.reflect.Method.invokeNative(Native Method) 在 java.lang.reflect.Method.invoke(Method.java:515) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 在 dalvik.system.NativeStart.main(Native Method)

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

【问题讨论】:

    标签: android spinner android-spinner


    【解决方案1】:

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

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

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

    HomeStateSpinner.setSelection(9);
    

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

    HomeStateSpinner.setSelection(2);
    

    【讨论】:

    • 谢谢!!最初我打算这样编写命令,但起初 Android Studio 显示它不正确(红色波浪线)。也许我太快了。
    【解决方案2】:

    使用这个:

    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 是您要设置选择的索引/位置,然后使用:

    HomeStateSpinner.setSelection(9);
    

    这一定能解决你的问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多