Android:通过数组以编程方式创建微调器


198

我是Android的新手,我正在尝试以编程方式创建一个微调器,并向其提供来自数组的数据,但是Eclipse会警告我无法处理。

这是我得到的:

此ArrayList包含应该位于微调器中的元素(稍后从文件填充):

ArrayList<String> spinnerArray = new ArrayList<String>();

这是我在应该创建微调器的网站上找到的代码:

Spinner spinner = new Spinner(this);
ArrayAdapter spinnerArrayAdapter = new ArrayAdapter(this,
                android.R.layout.simple_spinner_dropdown_item,
                spinnerArray);
spinner.setAdapter(spinnerArrayAdapter);

现在第二行(ArrayAdapter ...)在Eclipse中给了我警告"ArrayAdapter is a raw type... References to generic type ArrayAdapter<T> should be parameterized",我不知道如何解决此问题(或者首先是什么意思:))。

这只是一个警告,该应用程序似乎可以正常运行,但是我仍然想了解问题所在并进行修复。任何提示表示赞赏。

问候,Select0r

Answers:


388

ArrayAdapter<String> 应该管用。

即:

Spinner spinner = new Spinner(this);
ArrayAdapter<String> spinnerArrayAdapter = new ArrayAdapter<String>
            (this, android.R.layout.simple_spinner_item,
           spinnerArray); //selected item will look like a spinner set from XML
spinnerArrayAdapter.setDropDownViewResource(android.R.layout
                                                     .simple_spinner_dropdown_item);
spinner.setAdapter(spinnerArrayAdapter); 

我试过了,但错误只是稍有改变:) Type safety: The expression of type ArrayAdapter needs unchecked conversion to conform to ArrayAdapter<String>
Select0r 2010年

2
编辑您的帖子时,评论迅速:)我错过了第二篇<String>,您的代码现在可以使用了,非常感谢!
Select0r 2010年

23
使用ArrayAdapter<String> spinnerArrayAdapter = new ArrayAdapter<String>(activity, R.layout.simple_spinner_item); spinnerArrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);,否则某些设备上的微调器中可能会显示一个单选按钮。
2012年

您的回答是有帮助的,您能告诉我,如果我使用两个微调器,并且我想如果只有第一个微调器,那么第二个应该可以工作


109

以与Array相同的方式

// Array of choices
String colors[] = {"Red","Blue","White","Yellow","Black", "Green","Purple","Orange","Grey"};

// Selection of the spinner
Spinner spinner = (Spinner) findViewById(R.id.myspinner);

// Application of the Array to the Spinner
ArrayAdapter<String> spinnerArrayAdapter = new ArrayAdapter<String>(this,   android.R.layout.simple_spinner_item, colors);
spinnerArrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); // The drop down view
spinner.setAdapter(spinnerArrayAdapter);

我使用ArrayList进行此操作,因为我的数组来自循环(非静态)。
杰克逊(Jacksonkr)2011年

61

这对我有用,它从项目资源中加载了一个名为string的字符串数组shoes

Spinner              spinnerCountShoes = (Spinner)findViewById(R.id.spinner_countshoes);
ArrayAdapter<String> spinnerCountShoesArrayAdapter = new ArrayAdapter<String>(
                     this,
                     android.R.layout.simple_spinner_dropdown_item, 
                     getResources().getStringArray(R.array.shoes));
spinnerCountShoes.setAdapter(spinnerCountShoesArrayAdapter);

这是我的资源文件(res/values/arrays.xml),其字符串数组名为shoes

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string-array name="shoes">
        <item>0</item>
        <item>5</item>
        <item>10</item>
        <item>100</item>
        <item>1000</item>
        <item>10000</item>
    </string-array>
</resources>

使用此方法,可以使其变得多语言(如果需要)更加容易。


36

这实际上对我有用

    Spinner spinner = new Spinner(this);
    ArrayAdapter<String> spinnerArrayAdapter = new ArrayAdapter<String>(
            this, android.R.layout.simple_spinner_item, spinnerArray);
    spinnerArrayAdapter.setDropDownViewResource( android.R.layout.simple_spinner_dropdown_item );

    spinner = (Spinner) findViewById( R.id.spinner );
    spinner.setAdapter(spinnerArrayAdapter);

6
什么是这样做的目的Spinner spinner = new Spinner(this);,当你做到这一点spinner = (Spinner) findViewById( R.id.spinner );
MR5

为什么出错:找不到适用于ArrayAdapter(<anonymous OnItemSelectedListener>,int,DetailData)的合适构造函数ArrayAdapter.ArrayAdapter(Context,int,int,List <String>)不适用?
user151968年

6

这项工作对我来说:

String[] array = {"A", "B", "C"};
String abc = "";


Spinner spinner = new Spinner(getContext());
ArrayAdapter<String> spinnerArrayAdapter = new ArrayAdapter<String>(getContext(), android.R.layout.simple_spinner_item, array); //selected item will look like a spinner set from XML
spinnerArrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(spinnerArrayAdapter);

我正在使用片段。


3

使用Kotlin语言,您可以通过以下方式进行操作:

val values = arrayOf(
    "cat",
    "dog",
    "chicken"
)

ArrayAdapter(
    this,
    android.R.layout.simple_spinner_item,
    values
).also {
    it.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
    spinner.adapter = it
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.