旋转框未显示所选值

33

我通过从数据库中填充数组列表来实现了spinner。我可以在我的spinner数组适配器中获取和显示数组列表,但是如果我选择spinner中的项目,它不会显示在spinner中。我在这里犯了什么错误?

这是我的代码:

 Spinner spinner1 = (Spinner) findViewById(R.id.prospin);
     ArrayAdapter<String> adapter1 = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item, providerlist);

  adapter1.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner1.setAdapter(adapter1);

我使用以下代码获取选中项目的字符串:

Spinner provid = (Spinner)findViewById(R.id.prospin);
String provider =provid.getSelectedItem().toString();

有人能帮忙吗?拜托了!

27个回答

57

这个答案可能有点傻,但尝试一下。对我起作用了。

  1. 检查您旋转器的背景颜色!
  2. 如果是白色,请更改它
  3. 享受吧!

你让我开心了。 - Däñish Shärmà
哈哈,这解决了我的问题 :) 但是如果你想改变文本颜色,请看这里 - yashhy
太棒了!对我来说完全正常工作!谢谢 :) - Sandeep Yohans
如果我更改背景颜色,我的旋转器会消失,我该怎么做? - user9333933
在这上面浪费了一个小时。旋转器在模拟器中显示,但在我的设备上却没有显示。这是颜色的问题! - Lotfi

24

我遇到了同样的问题,并且通过在Spinner中绑定数据后添加 notifyDataSetChanged() 来解决了这个问题。

首先,我使用空的 ArrayList 绑定了适配器,然后从服务器获取了项目列表并将其添加到该列表中,但在更新列表后忘记了添加 notifyDataSetChanged()

只需在更新列表后添加 adapter.notifyDataSetChanged();

希望有所帮助。


9
这个回答难以理解,如果您提供示例代码可能会更有帮助。 - dinosaur
我不这么认为,因为逐行阅读可以理解所有内容。 - Pratik Butani

12

问题:

Spinner不显示默认值或选定项的值。但在选择后,下拉菜单项会显示。

原因:

背景色和文本颜色都是白色!!!

解决方案:

XML(建议使用):

编写自定义布局以替代默认的android.R.layout.simple_spinner_item,并将其用于Spinner项。

如何更改Spinner文本大小和文本颜色?

代码(可靠性较低):

your_spinner_instance.setOnItemSelectedListener(new Spinner.OnItemSelectedListener(){
    public void onItemSelected(AdapterView<?> parent, View view, int pos,
                               long id) {
        ((TextView) view).setTextColor(Color.RED);
    }
    public void onNothingSelected(AdapterView<?> parent) {
    }

});

Android需要一些重大更新,或者也许Dart和Flutter应该接管......

谢谢Catluc


你可以使用自定义的简单Spinner项。只需将你的TextView添加到其中: style="?android:attr/spinnerItemStyle" - elify

11

Spinner 的高度上使用 wrap_content

可能它没有足够的高度来显示文本。


5
如果上下文没有正确给出,也会发生这种情况。我使用了getApplicationContext(),而它需要getBaseContext()

你能否详细说明一下? 请回答这个问题。 https://stackoverflow.com/questions/59451247/android-spinner-inside-dialog-which-is-inside-a-fragment-is-not-showing-selected - Priyanka Singhal

5

如果您有自定义的适配器,您需要更改TextView的文本颜色。

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    TextView view = (TextView) super.getView(position, convertView, parent);
    view.setTextColor(Color.parseColor("#000000"));
    return view;
}

如果您没有自定义的适配器,您应该只更改下拉框的背景。


3

我之前在宽度和高度上使用了硬编码的数值,但是改成了使用wrap_content后就正常工作了。


2

对我来说问题在于我使用了getApplicationContext()。当我将getApplicationContext()替换为this时,它就能正常工作。

ArrayAdapter<*> adapter = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, documentsCategories);

1

我曾遇到相同的问题,但是所有的解决方案都不起作用。最终发现问题在于旋转器通过异步任务从Firestore数据库中填充。重新排列代码,使得适配器在异步任务完成后设置,问题迎刃而解!


1
我刚刚遇到了这个问题,在尝试了所有列出的解决方案后发现问题是我将旋转器的layout_width设置为60dp
将其更改为fill_parent,问题得到解决。

布局对我来说也是个问题:当水平空间不足时,下拉框似乎会被剪切,并最少只显示插入符号。 - user2711811

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接