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));
希望对您有所帮助
我这几天一直在想办法让我的微调器正常工作,但找不到任何可以帮助我的东西。我的微调器不显示值。微调器打开,每个值的空格都在那里,但它们都是空白的。我尝试过使用 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));
希望对您有所帮助