Android 微调器不显示数组,但显示位置

Android Spinner not displaying array, but showing places

我这几天一直在想办法让我的微调器正常工作,但找不到任何可以帮助我的东西。我的微调器不显示值。微调器打开,每个值的空格都在那里,但它们都是空白的。我尝试过使用 ArrayList<String>String[] 数组,两者都没有什么区别,但我需要使用其中一个吗?我尝试过许多不同类型的 ArrayAdapter,但其中 none 有效。下面我的代码中的一个是最接近的(如上所述),另外 3 个是我在网上看到的建议。我认为我的主要问题出在我的阵列适配器上,但我不确定。

这是我的javaclass

@Override
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_info);

    engineSpinner = (Spinner)findViewById(R.id.rockets);
    engineNameList = StagesData.getEngineNameList();
    engStrList = engineNameList.toArray(new String[engineNameList.size()]);

    adapter = new ArrayAdapter<String>(InfoActivity.this, android.R.layout.simple_spinner_item, engStrList);
    // adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, R.array.array_engines);
    // adapter = new ArrayAdapter<String>(InfoActivity.this, android.R.layout.simple_dropdown_item_1line, R.id.rockets, engStrList);
    // adapter = ArrayAdapter.createFromResource(InfoActivity.this, android.R.layout.simple_spinner_item, R.array.engines);

    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    engineSpinner.setAdapter(adapter);
    engineSpinner.setSelection(0);

这是我的 xml 微调器设置

<TableRow>
        <TextView
            android:text="@string/rocket"
            android:padding="3dp"/>
        <Spinner
            android:id="@+id/rockets"
            android:gravity="right"
            android:entries="@array/engines"
            android:clickable="true"
            android:textColor="@color/colorblack"
            android:spinnerMode="dropdown"
            android:backgroundTint="@color/colorPrimary" />
    </TableRow>

最后,这是我想从中提取的字符串数组文件(我是将我的字符串数组放在它自己的值文件夹中的文件中,还是放在字符串文件中,我已经看到两者都不知道,谢谢)

<?xml version="1.0" encoding="utf-8">
<resources>
      <string-array name="engines">
            <item>Ant</item>
            <item>Dart</item>
            <item>Dawn</item>
            <item>Flea</item>
            <item>Hammer</item>
            <item>Kickback</item>
            <item>MainSail</item>
            <item>Mammoth</item>
            <item>Nerv</item>
            <item>Poodle</item>
            <item>Puff</item>
            <item>R.A.P.I.E.R</item>
            <item>Reliant</item>
            <item>Rhino</item>
            <item>Skipper</item>
            <item>Spark</item>
            <item>Spider</item>
            <item>Swivel</item>
            <item>Terrier</item>
            <item>Thud</item>
            <item>Thumper</item>
            <item>Twin Boar</item>
            <item>Twitch</item>
            <item>Vector</item>
      </string-array>
</resources>

所以回顾一下我的问题,我需要使用 ArrayList<String> 还是 String[],如何设置我的 ArrayAdapter,我需要在哪里放置我的字符串数组?
提前致谢!

我重新创建了您的示例,并且对我来说效果很好

engStrList = engineNameList.toArray(new String[engineNameList.size()]); 
adapter = new ArrayAdapter<String>(InfoActivity.this, android.R.layout.simple_spinner_item, engStrList);

engStrList = new String[]{"a","b","c"};
adapter = new ArrayAdapter<String>(InfoActivity.this, android.R.layout.simple_spinner_item, engStrList);

所以我的猜测是您应该检查 StagesData.getEngineNameList() 返回的内容。


此外,如果您要使用字符串数组,这是正确的方法

ArrayAdapter adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, getResources().getStringArray(R.array.engines));

希望对您有所帮助