【问题标题】:Android - Text dropdown/selection of Spinner does not showAndroid - Spinner 的文本下拉/选择不显示
【发布时间】:2010-06-18 22:25:21
【问题描述】:

我正在使用此示例代码来填充 Spinner。从数据库中读取数据。选择正确显示 - 在这种情况下,它显示“绿色”和“红色”。

    Spinner spinnerColor = (Spinner) findViewById(R.id.spinnertProfile);

    mProfileDbHelper = new ProfileDbAdapter(this);
    mProfileDbHelper.open();

    Cursor profilesCursor = mProfileDbHelper.fetchAllProfiles();
    startManagingCursor(profilesCursor);

    // Create an array to specify the fields we want to display in the list
    String[] from = new String[] { ProfileDbAdapter.COL_PROFILE_TITLE };

    // and an array of the fields we want to bind those fields to
    int[] to = new int[] { R.id.textviewColors };

    // Now create a simple cursor adapter and set it to display
    SimpleCursorAdapter profilesAdapter = new SimpleCursorAdapter(this,
            R.layout.profile_color, profilesCursor, from,
            to);

    spinnerColor.setAdapter(profilesAdapter);

}

但是,当我更改为使用不同的布局时 android.R.layout.simple_spinner_dropdown_item。微调器文本消失了。

    // Now create a simple cursor adapter and set it to display
    SimpleCursorAdapter profilesAdapter = new SimpleCursorAdapter(this,
            R.layout.profile_color, profilesCursor, from,
            to);

    profilesAdapter
            .setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

    spinnerColor.setAdapter(profilesAdapter);

查看以下没有和使用 simple_spinner_dropdown_item 的快照:

我可能会错过什么吗?

【问题讨论】:

  • textviewColors 用在simple_spinner_dropdown_item 中吗?我会仔细检查是否有错别字。
  • Qberticus,我不确定我明白你在说什么。我是一个 Android 新手 :-) textviewColors 是 layout/profile_color.xml 中 TextView 的 ID,其中 profilesAdapter 在实例化为 SimpleCursorAdapter 时指代。 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent"> <TextView android:text="" android:id="@+id/textviewColors" android:layout_width="wrap_content" android:layout_height="wrap_content"> </TextView> </LinearLayout>

标签: android android-widget spinner


【解决方案1】:

好的,当您调用setDropDownViewResource 时,您正在替换之前在构造函数中指定的布局。在你的情况下R.layout.profile_colorSimpleCursorAdapter 扩展 ResourceCursorAdapter 并在构造函数中将两个布局设置为彼此相等。

public ResourceCursorAdapter(Context context, int layout, 
    Cursor c, boolean autoRequery) {

    super(context, c, autoRequery);
    mLayout = mDropDownLayout = layout;
    mInflater = (LayoutInflater)
        context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}

当您调用setDropDownViewResource 并更改下拉布局时,就会出现问题。 SimpleCursorAdapter 将继续使用您在构造函数中指定的相同资源 ID 绑定。

您应该只在SimpleCursorAdapter 的构造函数中指定布局。我建议将您的代码更改如下:

String[] from = new String[] { ProfileDbAdapter.COL_PROFILE_TITLE };
int[] to = new int[] { android.R.id.text1 }; // from simple_spinner_dropdown_item

SimpleCursorAdapter profilesAdapter = new SimpleCursorAdapter(this,
        android.R.layout.simple_spinner_dropdown_item, profilesCursor, from, to);

spinnerColor.setAdapter(profilesAdapter);

为了得到你想要的结果。

基本上不要使用setDropDownViewResource 方法。或者,如果您这样做了,并且您更改了资源 ID 绑定,则必须调用 SimpleCursorAdapter#changeCursorAndColumns;但是,对于您想要达到的简单结果来说,这可能是矫枉过正。

【讨论】:

    【解决方案2】:

    非常重要!我差点把头发扯下来,试图弄清楚为什么我的代码不起作用。对于那些可能正在阅读本文并且您的代码仍然无法正常工作的人,请确保 int[] to = new int[] {android.R.id.text1} 如果您是使用其他 android 布局(例如 android.R.layout.simple_spinner_dropdown_item)。如果整数数组 textview 不包含在您正在使用的指定布局中,则该代码将不起作用。在调试我的代码时,我改变了很多东西,却忘记了确保它们匹配。因此,如果您定义自己的布局,请确保使用该布局中的 textview。

    【讨论】:

      【解决方案3】:

      Qberticus,

      是的,您对资源 ID 绑定的看法是正确的!

      但是,如果我从 android.R.layout.simple_spinner_dropdown_item 开始,显然会显示下拉布局,但它并不漂亮:-)

      String[] from = new String[] { ProfileDbAdapter.COL_PROFILE_TITLE };
      int[] to = new int[] { android.R.id.text1 }; // from simple_spinner_dropdown_item
      
      SimpleCursorAdapter profilesAdapter = new SimpleCursorAdapter(this,
           android.R.layout.simple_spinner_dropdown_item, profilesCursor, from, to);
      
      spinnerColor.setAdapter(profilesAdapter);
      

      但现在如果我先从 simple_spinner_item 开始,然后 setDropDownViewResourcesimple_spinner_dropdown 项目,它现在会准确显示我要查找的内容。

      String[] from = new String[] { ProfileDbAdapter.COL_PROFILE_TITLE };
      int[] to = new int[] { android.R.id.text1 }; // from simple_spinner_dropdown_item
      
      SimpleCursorAdapter profilesAdapter = new SimpleCursorAdapter(this,
           android.R.layout.simple_spinner_item, profilesCursor, from, to);
      
      profilesAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
      
      spinnerColor.setAdapter(profilesAdapter);
      

      非常感谢您的帮助。

      【讨论】:

        猜你喜欢
        • 2015-05-14
        • 1970-01-01
        • 1970-01-01
        • 2017-05-31
        • 2015-03-08
        • 1970-01-01
        • 1970-01-01
        • 2019-02-08
        • 2014-10-04
        相关资源
        最近更新 更多