608 Stimmen

Wie erstellt man einen Android Spinner mit dem Anfangstext "Select One"?

Ich möchte einen Spinner verwenden, der zunächst (wenn der Benutzer noch keine Auswahl getroffen hat) den Text "Select One" anzeigt. Wenn der Benutzer auf den Spinner klickt, wird die Liste der Elemente angezeigt und der Benutzer wählt eine der Optionen aus. Nachdem der Benutzer eine Auswahl getroffen hat, wird das ausgewählte Element im Spinner anstelle von "Select One" angezeigt.

Ich habe den folgenden Code, um einen Spinner zu erstellen:

String[] items = new String[] {"One", "Two", "Three"};
Spinner spinner = (Spinner) findViewById(R.id.mySpinner);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
            android.R.layout.simple_spinner_item, items);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adapter);

Mit diesem Code wird zunächst das Element "Eins" angezeigt. Ich könnte einfach ein neues Element "Select One" zu den Elementen hinzufügen, aber dann würde "Select One" auch in der Dropdown-Liste als erstes Element angezeigt werden, was ich nicht möchte.

Wie kann ich dieses Problem beheben?

7 Stimmen

Die perfekte Lösung liegt in dieser Frage: stackoverflow.com/questions/9863378/ Überschreiben Sie einfach die Methode getDropDownView().

0 Stimmen

Haben Sie versucht, das erste Element Ihres Adapters auf "Select One" einzustellen?

0 Stimmen

[Hier eine andere tolle, schöne Lösung!][1] [1]: stackoverflow.com/questions/9863378/

7voto

Christian Vielma Punkte 13693

Sie können es in eine Textansicht ändern und diese verwenden:

android:style="@android:style/Widget.DeviceDefault.Light.Spinner"

und definieren dann die android:text Eigentum.

0 Stimmen

Funktioniert nur für API 14 und höher.

0 Stimmen

android:style="..." oder einfach style="..." ? Ich habe beides versucht, aber nichts ist passiert!

6voto

Anthony Graglia Punkte 5183

XML-Datei:

<Spinner android:id="@+id/locationSpinner"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:prompt="@string/select_location" />

Tätigkeit:

private Spinner featuresSelection;
private ArrayAdapter<CharSequence> featuresAdapter;
private List<CharSequence> featuresList;

onCreate:

featuresList = new ArrayList<CharSequence>();
featuresAdapter = new ArrayAdapter<CharSequence>(this,
  android.R.layout.simple_spinner_item, featuresList);
featuresAdapter.setDropDownViewResource(
  android.R.layout.simple_spinner_dropdown_item);
featuresSelection = ((Spinner) yourActivity.this
  .findViewById(R.id.locationSpinner));
featuresSelection.setAdapter(featuresAdapter);
featuresSelection.setOnItemSelectedListener(
  new MyOnItemSelectedListener());

Einige Funktionen (fügen dem Adapter programmatisch Dinge hinzu)>

featuresAdapter.add("some string");

Jetzt haben Sie einen leeren Spinner und können Code schreiben, um das Dialogfeld nicht zu öffnen, wenn es leer ist. Oder sie können zurück drücken. Sie können ihn aber auch während der Laufzeit mit einer Funktion oder einer anderen Liste füllen.

0 Stimmen

Es besteht auch keine Notwendigkeit, notifyDataSetChanged() zu verwenden, da es standardmäßig auf true gesetzt sein sollte.

5voto

Majedur Punkte 2282

Außerdem gibt es einen einfachen Trick, um die Voreinstellung anzuzeigen:

Sie können einen Standardwert in Ihre Liste aufnehmen und dann alle Ihre Sammlungen mit list.addAll(yourCollection);

Ein Beispiel für funktionierenden Code finden Sie hier:

List<FuelName> fuelList = new ArrayList<FuelName>();
                    fuelList.add(new FuelName(0,"Select One"));
                    fuelList.addAll(response.body());
                    ArrayAdapter adapter = new ArrayAdapter<>(getActivity(), android.R.layout.simple_spinner_item, fuelList);
                    //fuelName.setPrompt("Select Fuel");
                    fuelName.setAdapter(adapter);

4voto

Cyril Punkte 2729

Ich habe einen Spinner auf meinem main.xml und seine Id ist @+id/spinner1

Dies ist, was ich in meine OnCreate-Funktion schreibe:

spinner1 = (Spinner)this.findViewById(R.id.spinner1);
final String[] groupes = new String[] {"A", "B", "C", "D", "E", "F", "G", "H"};
ArrayAdapter<CharSequence> featuresAdapter = new ArrayAdapter<CharSequence>(this, android.R.layout.simple_spinner_item, new ArrayList<CharSequence>());
featuresAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner1.setAdapter(featuresAdapter);
for (String s : groupes) featuresAdapter.add(s);

spinner1.setOnItemSelectedListener(new OnItemSelectedListener() {
     public void onItemSelected(AdapterView<?> arg0, View arg1, int position, long id) {
         // Here go your instructions when the user chose something
         Toast.makeText(getBaseContext(), groupes[position], 0).show();
     }
     public void onNothingSelected(AdapterView<?> arg0) { }
});

Sie muss nicht in der Klasse implementiert werden.

4voto

Ramesh Akula Punkte 5630

Ich habe Folgendes versucht. Nehmen Sie eine Schaltfläche und geben Sie ihr das Klick-Ereignis. Durch Ändern der Schaltfläche Hintergrund, scheint es ein Spinner zu sein.

Deklarieren Sie als globale Variablen alertdialog und default value..

AlertDialog d;
static int default_value = 0;
final Button btn = (Button) findViewById(R.id.button1);
btn .setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View v)
{
    //c.show();
    final CharSequence str[] = {"Android","Black Berry","Iphone"};
        AlertDialog.Builder builder =
          new AlertDialog.Builder(TestGalleryActivity.this).setSingleChoiceItems(
            str, default_value,new  DialogInterface.OnClickListener() {

            @Override
            public void onClick(DialogInterface dialog, int position)
            {
                Toast.makeText(TestGalleryActivity.this,
                               "" + position,
                               Toast.LENGTH_SHORT).show();
                default_value = position;
                btn.setText(str[position]);
                if(d.isShowing())
                    d.dismiss();
            }
        }).setTitle("Select Any");
        d = builder.create();
        d.show();
    }
});

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X