使用String ArrayAdapter从字符串数组源填充Spinner

时间:2012-08-24 12:48:28

标签: android xml spinner

我通过在Java代码中填充微调器来创建我的应用程序。我现在正尝试将其转换为从strings.xml文件填充我的Spinners。我关注了一些网站(example 1example 2),但无法让我的代码生效。

这些问题的主要问题是他们使用的ArrayAdapter类型为<CharSequence>。我可以使用<String> ArrayAdapters以某种方式执行此操作吗?

这是我的XML文件中的数组:

<string-array name="anti_pump_ap_mode_array">
    <item>OFF</item>
    <item>Anti-Pump</item>
    <item>Motor Cut...</item>
</string-array>

以下是我尝试过的代码:

apModeAdapter = new ArrayAdapter<String>(this, R.array.anti_pump_ap_mode_array, android.R.layout.simple_spinner_item );

apModeAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, R.array.anti_pump_ap_mode_array );

apModeAdapter = ArrayAdapter.createFromResource(this, android.R.layout.simple_spinner_item, R.array.anti_pump_ap_mode_array );

当然最后一个给了我一个错误,但前两个只是不填充我的微调器。当我运行应用程序时,Spinner只是空的。

2 个答案:

答案 0 :(得分:18)

使用以下方式,交换数组ID和布局ID。 Textarray资源id是第二个参数

apModeAdapter = ArrayAdapter.createFromResource(this, R.array.anti_pump_ap_mode_array, android.R.layout.simple_spinner_item,  );

编辑: 第一种工作方式。从资源中获取字符串数组

Resources res = getResources();
apModeAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, res.getStringArray(R.array.anti_pump_ap_mode_array) );

答案 1 :(得分:2)

CharSequenceString实现的接口,因此即使API createFromResource()返回接口类型,它仍然会填充您的String数组。如果您确实需要稍后以字符串形式访问结果,则可以转换访问者。但是,大多数Android UI方法也会将CharSequence作为输入。

此外,参数相反。它应该是这样的:

ArrayAdapter.createFromResource(this, R.array.anti_pump_ap_mode_array, android.R.layout.simple_spinner_item );