Android'de bir spinner'a nasıl öğe eklenir?


Yanıtlar:


144

XML dosyası:

<Spinner
    android:id="@+id/Spinner01"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"/>

Java dosyası:

public class SpinnerExample extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        String[] arraySpinner = new String[] {
            "1", "2", "3", "4", "5", "6", "7"
        };
        Spinner s = (Spinner) findViewById(R.id.Spinner01);
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
                android.R.layout.simple_spinner_item, arraySpinner);
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        s.setAdapter(adapter);
    }
}

Spinner örneğine bakın .


7
Bu teorik olarak soruya cevap olsa da, tercih edildiğini burada cevabın temel parçalarını kapsadığı ve başvuru için bağlantı sağlar.
Bill the Lizard

bu android.R.layout.simple_spinner_dropdown_item'i bu android.R.layout.simple_spinner_item yerine kullanın, çok daha iyi görünüyor
sai Gorantla

Array_spinner nedir? dizinin adı arraySpinner'dır. yazım hatası mı yoksa sadece böyle mi olmalı>
SurajS

1
Eklemeyi düşünün adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);( s.setAdapter(adapter);açılır
listenin

1
@StephenM bağlantıyı değiştirdi
pankajagarwal

99

Başka bir seçenek buldum: düzen dosyasında döndürücü tanımı

<Spinner android:id="@+id/spinner"
    android:layout_width="fill_parent"
    android:drawSelectorOnTop="true"
    android:prompt="@string/spin"
    android:entries="@array/spinnerItems"
/>

Array.xml dosyasındaki öğe tanımı:

<resources>
    <string-array name="spinnerItems">
        <item>item1</item>
        <item>item2</item>
        <item>item3</item>
        <item>item4</item>
    </string-array>
</resources>

Kodun tam kaynağına bağlantı


Yukarıdaki tüm yöntemleri ve diğer birkaç öğreticiyi denedim, ancak bu benim için çalışan tek kişi. Çok teşekkür ederim!
snapplex

Size yardımcı olmaktan mutluluk duyarım @snapplex;)
maxivis

1
Bu en iyi cevap olmalı. Temiz.

30

Bu kodu deneyin:

final List<String> list = new ArrayList<String>();
list.add("Item 1");
list.add("Item 2");
list.add("Item 3");
list.add("Item 4");
list.add("Item 5");

final String[] str = {"Report 1", "Report 2", "Report 3", "Report 4", "Report 5"};

final Spinner sp1 = (Spinner) findViewById(R.id.spinner1);
final Spinner sp2 = (Spinner) findViewById(R.id.spinner2);

ArrayAdapter<String> adp1 = new ArrayAdapter<String>(this,
                              android.R.layout.simple_list_item_1, list);
adp1.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
sp1.setAdapter(adp1);

ArrayAdapter<String> adp2 = new ArrayAdapter<String>(this,
                                  android.R.layout.simple_spinner_item, str);
adp2.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
sp2.setAdapter(adp2);

sp1.setOnItemSelectedListener(new OnItemSelectedListener()
    {
        @Override
        public void onItemSelected(AdapterView<?> arg0, View arg1, int position, long id) {
            // TODO Auto-generated method stub
            Toast.makeText(getBaseContext(), list.get(position), Toast.LENGTH_SHORT).show();
        }

        @Override
        public void onNothingSelected(AdapterView<?> arg0) {
            // TODO Auto-generated method stub
        }
    });

sp2.setOnItemSelectedListener(new OnItemSelectedListener()
    {
        @Override
        public void onItemSelected(AdapterView<?> arg0, View arg1, int position, long id) {
            // TODO Auto-generated method stub
            Toast.makeText(getBaseContext(), str[position], Toast.LENGTH_SHORT).show();
        }

        @Override
        public void onNothingSelected(AdapterView<?> arg0) {
            // TODO Auto-generated method stub
        }
    });

Dize dizisi xml dosyası aracılığıyla da değer değiştirici öğe değeri ekleyebilirsiniz ..

<resources>
    <string name="app_name">Spinner_ex5</string>
    <string name="hello_world">Hello world!</string>
    <string name="menu_settings">Settings</string>
    <string name="title_activity_main">MainActivity</string>
    <string-array name="str2">
        <item>Data 1</item>
        <item>Data 2</item>
        <item>Data 3</item>
        <item>Data 4</item>
        <item>Data 5</item>
    </string-array>
</resources>

MainActivity.java'da:

final Spinner sp3 = (Spinner) findViewById(R.id.spinner3);
ArrayAdapter<CharSequence> adp3 = ArrayAdapter.createFromResource(this,
                                    R.array.str2, android.R.layout.simple_list_item_1);

adp3.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
sp3.setAdapter(adp3);
sp3.setOnItemSelectedListener(new OnItemSelectedListener()
    {
        @Override
        public void onItemSelected(AdapterView<?> arg0, View arg1, int position, long id) {
            // TODO Auto-generated method stub
            String ss = sp3.getSelectedItem().toString();
            Toast.makeText(getBaseContext(), ss, Toast.LENGTH_SHORT).show();
        }

        @Override
        public void onNothingSelected(AdapterView<?> arg0) {
            // TODO Auto-generated method stub
        }
    });

9

Spinner'a öğe eklemek için bir şey yapabilir, bir adaptör oluşturmayı deneyebilir ve ardından adaptöre öğeler ekleyebilir / kaldırabilirsiniz, ardından bu adaptörü setAdapter()yöntemi kullanarak kolayca döndürücüye bağlayabilirsiniz .

İşte bir örnek:

spinner.setAdapter(adapter);
adapter.add(item1);
adapter.add(item2);
adapter.add(item3);
adapter.add(item4);
adapter.add(item5);
adapter.notifyDataSetChanged();
spinner.setAdapter(adapter);

ur cevabınız için thanx çözümü de aldım şimdi bunun üzerinde bir sorunla karşı karşıyayım.

Döndürücünün seçili öğesini, yani konumunu, daha fazla başka yönteme geçirmek istiyorum, ne yaptığımı görün ... dataspin.setOnItemSelectedListener (new myitemlistener ());

veri iğnesi Spinner nesnem

@Override public void onItemSelected (AdapterView <?> Parent, View view, int position, long id) {// TODO Otomatik oluşturulan yöntem saplaması String p = parent.getItemAtPosition (position) .toString (); int konum = (int) parent.getItemIdAtPosition (konum); System.out.println ("döndürücünün konumu ..." + konum); setSearchView (konum); }

bunu yaparsam dönen öğenin görüntülenmemesi

8
<string-array name="array_name">
<item>Array Item One</item>
<item>Array Item Two</item>
<item>Array Item Three</item>
</string-array>

Düzeninizde:

<Spinner 
        android:id="@+id/spinner"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:drawSelectorOnTop="true"
        android:entries="@array/array_name"
    />

ama sonra seçilen öğeyi nasıl elde edersiniz?
Demotivated

1
Java dosyasında ilk TypeCast. Ardından Spinner spinner'ı kullanın; spinner = findViewById (R.id. spinner); spinner.setOnItemClickListener (new AdapterView.OnItemClickListener () {@Override public void onItemClick (AdapterView <?> parent, View view, int position, long id) {}});
ZIA ANSARI

5

Bu kod temelde bir JSON dizi nesnesini okur ve her satırı döndürücüde parametre olarak iletilen bir seçeneğe dönüştürür:

public ArrayAdapter<String> getArrayAdapterFromArrayListForSpinner(ArrayList<JSONObject> aArrayList, String aField)
{
    ArrayAdapter<String> aArrayAdapter = new ArrayAdapter<String>(context, android.R.layout.simple_spinner_item);
    aArrayAdapter.setDropDownViewResource(R.layout.multiline_spinner_dropdown_item); //android.R.layout.simple_spinner_dropdown_item
    try {
        for (int i = 0; i < aArrayList.size(); i++)
        {
            aArrayAdapter.add(aArrayList.get(i).getString(aField)); 
        }
    } catch (JSONException e) {
        e.printStackTrace();
        ShowMessage("Error while reading the JSON list");
    }
    return aArrayAdapter;       
}

2

XML düzenine bir döndürücü ekleyin ve ardından bu kodu Java dosyasına ekleyin:

Spinner spinner;
spinner = (Spinner) findViewById(R.id.spinner1) ;
java.util.ArrayList<String> strings = new java.util.ArrayList<>();
strings.add("Mobile") ;
strings.add("Home");
strings.add("Work");
SpinnerAdapter spinnerAdapter = new SpinnerAdapter(AddMember.this, R.layout.support_simple_spinner_dropdown_item, strings);
spinner.setAdapter(spinnerAdapter);

1

Listeyi güncelledikten sonra bu kodu ekleyin

Varsayalım:

ArrayAdapter <String> değişken adı dataAdapter ve List değişken adı anahtarlardır .

  • dataAdapter.addAll (anahtarlar);
  • dataAdapter.notifyDataSetChanged ();

1

Spinner'a bir öğe daha eklemek için şunları yapabilirsiniz:

ArrayAdapter myAdapter = 
  ((ArrayAdapter) mySpinner.getAdapter());

myAdapter.add(myValue);

myAdapter.notifyDataSetChanged();

"UnsupportedOperationException" oluştu
abbasalim

0

Sadece adaptörü temizlemek, tüm öğeleri eklemek ve aşağıdaki gibi değişikliği bildirmek için:

  public void show(List<Object> objLIst) {
    adapter.clear();
    adapter.addAll(objLIst);
    adapter.notifyDataSetChanged(); }

0

Daha kolay bir yol, malzeme eğirme kitaplığını kullanmaktır: https://github.com/jaredrummler/MaterialSpinner

önce projenize ekleyin:

compile 'com.jaredrummler:material-spinner:1.2.4'

ve bunun gibi kullanın:

<com.jaredrummler.materialspinner.MaterialSpinner
    android:id="@+id/spinner"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"/>

ve java'da çok kolay öğe ekleyebileceğiniz java kodu:

MaterialSpinner spinner = (MaterialSpinner) findViewById(R.id.spinner);
spinner.setItems("item 1", "item 2", "item 3", "item 4", "item 5");
spinner.setOnItemSelectedListener(new MaterialSpinner.OnItemSelectedListener<String>() {

  @Override public void onItemSelected(MaterialSpinner view, int position, long id, String item) {
    Snackbar.make(view, "Clicked " + item, Snackbar.LENGTH_LONG).show();
  }
});
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.