Android: Buat pemintal secara terprogram dari array

198

Saya semua baru di Android dan saya mencoba membuat pemintal secara terprogram dan mengumpankannya dengan data dari sebuah array, tetapi Eclipse memberi saya peringatan yang tidak bisa saya tangani.

Inilah yang saya dapatkan:

ArrayList ini menampung elemen-elemen yang seharusnya ada di spinner (terisi dari file di kemudian hari):

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

Ini adalah kode yang saya temukan di situs yang harus membuat pemintal:

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

Sekarang baris kedua (ArrayAdapter ...) memberi saya peringatan di Eclipse yang mengatakan "ArrayAdapter is a raw type... References to generic type ArrayAdapter<T> should be parameterized", saya tidak tahu bagaimana cara memperbaikinya (atau apa artinya itu sejak awal :)).

Ini hanya peringatan dan Aplikasi tampaknya berjalan baik-baik saja, tetapi saya masih ingin memahami apa yang salah dan memperbaikinya. Setiap petunjuk dihargai.

Salam, Pilih0r

Select0r
sumber

Jawaban:

388

ArrayAdapter<String> harus bekerja.

yaitu:

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); 
Brandon O'Rourke
sumber
Saya mencobanya tetapi kesalahannya hanya berubah sedikit :) Type safety: The expression of type ArrayAdapter needs unchecked conversion to conform to ArrayAdapter<String>
Select0r
2
Berkomentar dengan cepat saat Anda mengedit posting Anda :) Saya melewatkan yang kedua <String>, kode Anda berfungsi sekarang, terima kasih banyak!
Pilih0r
23
gunakan ArrayAdapter<String> spinnerArrayAdapter = new ArrayAdapter<String>(activity, R.layout.simple_spinner_item); spinnerArrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);atau tombol radio mungkin muncul di pemintal pada beberapa perangkat.
Ken
jawaban Anda sangat membantu dan dapatkah Anda memberi tahu saya bahwa jika saya menggunakan dua pemintal dan saya ingin jika pemintal pertama, maka yang kedua harus bekerja
1
itu juga menjelaskan metode ini dalam dokumentasi android: developer.android.com/guide/topics/ui/controls/spinner.html
WOUNDEDStevenJones
109

Sama halnya dengan 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);
Yann Masoch
sumber
Saya melakukan ini menggunakan ArrayList karena array saya berasal dari loop (bukan statis).
Jacksonkr
61

Ini bekerja untuk saya dengan string-array bernama shoesdiambil dari sumber daya proyek:

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);

Ini adalah file sumber daya saya ( res/values/arrays.xml) dengan array-string bernama 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>

Dengan metode ini, lebih mudah membuatnya multibahasa (jika perlu).

Bruno Bieri
sumber
36

Ini sebenarnya bekerja untuk saya

    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);
Opy
sumber
6
Apa tujuan dari ini Spinner spinner = new Spinner(this);ketika Anda melakukan inispinner = (Spinner) findViewById( R.id.spinner );
mr5
mengapa kesalahan: tidak ditemukan konstruktor yang sesuai untuk ArrayAdapter (<anonim OnItemSelectedListener>, int, DetailData) konstruktor ArrayAdapter. ArrayAdapter (Konteks, int, int, Daftar <String>) tidak berlaku?
user151968
6

ini bekerja untuk saya: -

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);

Saya menggunakan Fragmen.

Arish Khan
sumber
3

Dalam bahasa Kotlin Anda dapat melakukannya dengan cara ini:

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
}
Micer
sumber