Android - 文本下拉/选择Spinner不显示

时间:2010-06-18 22:25:21

标签: android android-widget spinner

我正在使用此示例代码填充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 时。 Spinner Text消失了。

    // 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 的快照: enter image description here

我可能会错过什么?

3 个答案:

答案 0 :(得分:3)

好的,正在发生的事情是当你调用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;但是,对于你想要达到的简单结果来说,这可能是过度的。

答案 1 :(得分:2)

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

答案 2 :(得分:0)

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);

alt text http://www.freeimagehosting.net/uploads/c2647bd57d.gif

但现在如果我首先使用 simple_spinner_item ,然后setDropDownViewResource开始 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_item, profilesCursor, from, to);

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

spinnerColor.setAdapter(profilesAdapter);

非常感谢你的帮助。