Android: Programcı olarak diziden dizici oluşturun


199

Ben Android için yeni ve programlı bir spinner oluşturmak ve bir dizi veri ile beslemek çalışıyorum, ama Eclipse bana idare edemez bir uyarı verir.

İşte ne var:

Bu ArrayList, değer değiştiricide olması gereken öğeleri tutar (daha sonra bir dosyadan doldurulur):

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

Bu, spinner'ı oluşturması gereken bir sitede bulduğum kod:

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

Şimdi ikinci satır (ArrayAdapter ...) bana Eclipse söyleyerek bir uyarı verir "ArrayAdapter is a raw type... References to generic type ArrayAdapter<T> should be parameterized", bu (ya da ilk etapta ne demek :) düzeltmek için hiçbir fikrim yok.

Bu sadece bir uyarı ve Uygulama iyi çalışıyor gibi görünüyor, ama yine de neyin yanlış olduğunu anlamak ve düzeltmek istiyorum. Herhangi bir ipucu takdir.

Selamlar, Select0r

Yanıtlar:


389

ArrayAdapter<String> çalışmalı.

yani:

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

Bunu denedim ama hata sadece biraz değişiyor :) Type safety: The expression of type ArrayAdapter needs unchecked conversion to conform to ArrayAdapter<String>
Select0r

2
Yayınınızı düzenlerken hızlı bir şekilde yorum yaptı :) İkincisini kaçırdım, <String>kodunuz şimdi çalışıyor, çok teşekkürler!
Select0r

23
kullanmak ArrayAdapter<String> spinnerArrayAdapter = new ArrayAdapter<String>(activity, R.layout.simple_spinner_item); spinnerArrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);ya da başka bir radyo düğmesi bazı cihazlarda bükücüsünde görünebilir.
Ken

Cevabınız yardımcı oldu ve iki iplikçi kullanıyorsam ve 1. spinner sadece ikinci işe yarayacaksa istiyorum lütfen bana söyleyebilir misiniz

1
Android dokümanında da bu yöntemi açıklar: developer.android.com/guide/topics/ui/controls/spinner.html
WOUNDEDStevenJones

109

Array ile aynı şekilde

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

Benim dizi bir döngü (statik değil) geliyor çünkü bir ArrayList kullanarak yaptım.
Jacksonkr

61

Bu benim için proje kaynaklarından yüklenen adlı bir dize dizisi ile çalıştı 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);

Bu benim kaynak dosyası (olduğu res/values/arrays.xml) ile dize dizisi adlandırılmış 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>

Bu yöntemle çok dilli hale getirmek daha kolaydır (gerekirse).


36

Bu aslında benim için çalıştı

    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
Bu amacı nedir Spinner spinner = new Spinner(this);bunu yaparkenspinner = (Spinner) findViewById( R.id.spinner );
mR5

neden hata: ArrayAdapter (<anonim OnItemSelectedListener>, int, DetailData) yapıcısı için uygun bir kurucu bulunamadı ArrayAdapter.ArrayAdapter (Bağlam, int, int, Liste <Dizgi>) uygulanamaz?
user151968 18:16

6

benim için bu iş: -

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

Parça kullanıyorum.


3

Kotlin dilinde bunu şu şekilde yapabilirsiniz:

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
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.