451 Stimmen

Android Spinner: Abrufen des Änderungsereignisses für das ausgewählte Element

Wie können Sie den Ereignis-Listener für einen Spinner festlegen, wenn sich das ausgewählte Element ändert?

Im Grunde versuche ich, etwas Ähnliches zu tun:

spinner1.onSelectionChange = handleSelectionChange;

void handleSelectionChange(Object sender){
    //handle event
}

0 Stimmen

Ich habe diese Antworten ausprobiert, aber keine war hilfreich. Sobald Spinner Komponente unterstützt nicht Element klicken Ereignisse. Spinner Dokumentation

4voto

fishjd Punkte 1547

Wenn Sie einen echten onChangedListener() wünschen. Speichern Sie den Anfangswert im Handler und prüfen Sie, ob er sich geändert hat. Es ist einfach und macht no erfordern eine globale Variable. Funktioniert, wenn Sie mehr als einen Spinner auf der Seite haben.

String initialValue = // get from Database or your object
mySpinner.setOnItemSelectedListener(new SpinnerSelectedListener(initialValue));

...

protected class SpinnerSelectedListener implements AdapterView.OnItemSelectedListener {

        private SpinnerSelectedListener() {
            super();
        }

        public SpinnerSelectedListener(String initialValue) {
            this();
            this.initialValue = initialValue;
        }

        private String initialValue;

        // getter and setter removed.  

        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
            final String newValue = (String) spinHeight.getItemAtPosition(position);
            if (newValue.equals(initialValue) == false) {
               // Add your code here.  The spinner has changed value. 

               // Maybe useful.   
               // initialValue = newValue;
            }

        }

        @Override
        public void onNothingSelected(AdapterView<?> parent) {
               // Maybe useful.   
               // initialValue = null; 
        }
    }

Objekte sind dein Freund, benutze sie.

3voto

r-magalhaes Punkte 420
spinner.setOnItemSelectedListener(
            new AdapterView.OnItemSelectedListener() {

                @Override
                public void onItemSelected(AdapterView<?> arg0, View arg1,
                        int arg2, long arg3) {

                    // TODO Auto-generated method stub
                }

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

                }
                //add some code here
            }
        );

2voto

sanjay Punkte 515

Das wird funktionieren Intialisiere den Spinner und findviewbyid und benutze dies es wird funktionieren

    Spinner schemeStatusSpinner;

  schemeStatusSpinner = (Spinner) dialog.findViewById(R.id.spinner);

schemeStatusSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) {
            // your code here
            if(schemeStatusSpinner.getSelectedItemId()==4){
                reasonll.setVisibility(View.VISIBLE);
            }
            else {
                reasonll.setVisibility(View.GONE);
            }
        }

        @Override
        public void onNothingSelected(AdapterView<?> parentView) {
            // your code here
        }

    });

0 Stimmen

Wie können wir es mit Lambda schreiben?

2voto

Adam Noor Punkte 81

Standardmäßig erhalten Sie das erste Element des Spinner-Arrays durch

value = spinner.getSelectedItem().toString();

wenn Sie den Wert in der Drehscheibe ausgewählt haben, wird der ausgewählte Wert angezeigt

Wenn Sie die Position des ausgewählten Elements wünschen, gehen Sie folgendermaßen vor

pos = spinner.getSelectedItemPosition();

die beiden obigen Antworten sind für ohne Anwendung Hörer

1voto

Pinakin Kansara Punkte 2135

Der beste Weg wäre meiner Meinung nach ein flagitemselected = 0; en onCreate() . Und wenn ein Element ausgewählt wird, wird diese Markierung erhöht, d. h. flagitemselected++ ; und dann prüfen

if(flagitemselected!=1)
{
// do your work here
}

Ich denke, das wird helfen.

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