Wie füge ich einem Spinner in Android Elemente hinzu?

107

Wie füge ich einem Spinner Gegenstände hinzu?

Samet ÖZTOPRAK
quelle
1
Wenn Sie Elemente dynamisch zu Ihrer Liste hinzufügen möchten, rufen Sie adapter.notifyDataSetChanged () auf
asok Buzz

Antworten:

144

XML-Datei:

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

Java-Datei:

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

Siehe Spinner-Beispiel .

pankajagarwal
quelle
7
Während dies theoretisch die Frage beantworten kann, wäre es vorzuziehen , die wesentlichen Teile der Antwort hier aufzunehmen und den Link als Referenz bereitzustellen.
Bill the Lizard
Verwenden Sie dieses android.R.layout.simple_spinner_dropdown_item anstelle dieses android.R.layout.simple_spinner_item, es sieht viel besser aus
sai Gorantla
Was ist array_spinner? Der Name des Arrays lautet arraySpinner. ist es ein Rechtschreibfehler oder muss es nur so sein>
SurajS
1
Erwägen Sie das Hinzufügen adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);(vorher s.setAdapter(adapter);, damit das Dropdown besser aussieht.
Ban-Geoengineering
1
@ StephenphenM änderte den Link
Pankajagarwal
99

Ich habe eine andere Option gefunden: die Spinner-Definition in der Layout-Datei

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

Elementdefinition in der Datei array.xml:

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

Link zur vollständigen Quelle des Codes

maxivis
quelle
Ich habe alle oben genannten Methoden und einige andere Tutorials ausprobiert, aber dies ist die einzige, die für mich funktioniert hat. Ich danke dir sehr!
Snapplex
Freut mich, Ihnen zu helfen @snapplex;)
Maxivis
1
Dies sollte die beste Antwort sein. Reinigen.
30

Versuchen Sie diesen Code:

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

Sie können den Wert des Spinner-Elements auch über die XML-Datei des String-Arrays hinzufügen.

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

In mainActivity.java:

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
        }
    });
Balaji
quelle
9

Um Elemente in Spinner hinzuzufügen, können Sie eine Sache tun, versuchen, einen Adapter zu erstellen und dann Elemente zum Adapter hinzuzufügen / daraus zu entfernen. Anschließend können Sie diesen Adapter mithilfe der setAdapter()Methode einfach an Spinner binden .

Hier ist ein Beispiel:

spinner.setAdapter(adapter);
adapter.add(item1);
adapter.add(item2);
adapter.add(item3);
adapter.add(item4);
adapter.add(item5);
adapter.notifyDataSetChanged();
spinner.setAdapter(adapter);
Paresh Mayani
quelle
Danke für deine Antwort, ich habe die Lösung auch jetzt habe ich ein Problem damit.
Ich möchte das ausgewählte Element des Spinners abrufen, dh seine Position, da ich es weiter an eine andere Methode übergeben möchte. Sehen Sie, was ich getan habe ... dataspin.setOnItemSelectedListener (new myitemlistener ());
Dataspin ist mein Spinner-Objekt
@Override public void onItemSelected (AdapterView <?> Parent, Ansichtsansicht, int-Position, lange ID) {// TODO Automatisch generierter Methodenstub String p = parent.getItemAtPosition (position) .toString (); int pos = (int) parent.getItemIdAtPosition (position); System.out.println ("Position des Spinners ..." + pos); setSearchView (pos); }
Wenn ich dies tue, wird der Spinner-Artikel nicht angezeigt
8
<string-array name="array_name">
<item>Array Item One</item>
<item>Array Item Two</item>
<item>Array Item Three</item>
</string-array>

In Ihrem Layout:

<Spinner 
        android:id="@+id/spinner"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:drawSelectorOnTop="true"
        android:entries="@array/array_name"
    />
PRATEEK BHARDWAJ
quelle
aber wie bekommt man dann den ausgewählten Artikel?
Demotiviert am
1
Erster TypeCast in der Java-Datei. Verwenden Sie dann Spinner Spinner; spinner = findViewById (R.id.spinner); spinner.setOnItemClickListener (neuer AdapterView.OnItemClickListener () {@Override public void onItemClick (AdapterView <?> übergeordnet, Ansichtsansicht, int-Position, lange ID) {}});
ZIA ANSARI
5

Dieser Code liest im Grunde ein JSON-Array-Objekt und konvertiert jede Zeile in eine Option im Drehfeld, die als Parameter übergeben wird:

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;       
}
Please_Dont_Bully_Me_SO_Lords
quelle
2

Fügen Sie dem XML-Layout einen Drehfeld hinzu und fügen Sie diesen Code dann der Java-Datei hinzu:

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);
Hossein
quelle
1

Fügen Sie diesen Code nach dem Aktualisieren der Liste hinzu

Annehmen:

Der Variablenname ArrayAdapter <String> lautet dataAdapter , und der Variablenname List lautet key .

  • dataAdapter.addAll (Schlüssel);
  • dataAdapter.notifyDataSetChanged ();
Pankaj Malviya
quelle
1

Um Spinner um einen weiteren Gegenstand zu erweitern , können Sie:

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

myAdapter.add(myValue);

myAdapter.notifyDataSetChanged();
Zon
quelle
"UnsupportedOperationException" ist aufgetreten
abbasalim
0

Es geht nur darum, den Adapter zu löschen, alle Elemente hinzuzufügen und Änderungen wie unten zu melden:

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

Eine einfachere Möglichkeit ist die Verwendung der Material-Spinner-Bibliothek: https://github.com/jaredrummler/MaterialSpinner

Fügen Sie zuerst Ihrem Projekt hinzu:

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

und verwenden Sie wie folgt:

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

und Java-Code, mit dem Sie so einfach Elemente in Java hinzufügen können:

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();
  }
});
sajad abbasi
quelle