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

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

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

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


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

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.


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
}
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.