Ich verwende eine Zwei-Wege-Datenbindung für eine Bearbeitungsaktivität. Ich versuche, das Kesseln zu vermeiden, und ich muss wissen, wann sich die Daten bei dieser Aktivität geändert haben. Ich habe einen TextWatcher für EditText erstellt, der perfekt funktioniert. Jetzt möchte ich dasselbe mit einem Spinner machen. So habe ich eine SpinnerWatcher Klasse erstellt, verweisen sie in meiner Modellansicht (POJO) und in meinem Layout. Alles kompiliert und läuft, aber ich bekomme nicht die erwarteten Ergebnisse. Die ZeileSpinner AdapterView.OnItemSelectedListener funktioniert nicht
hasDataChanged = true;
wird nie ausgeführt. Ich möchte den SetOnItemSelectedListener in der Layoutdatei und der Logik im ViewModel angeben, nicht in der Aktivität.
Hier ist meine SpinnerWatcher Klasse:
public abstract class MySpinnerWatcher implements AdapterView.OnItemSelectedListener {
@Override
public void onItemSelected(AdapterView<?> parent, View v, int position, long id) {
// TODO Auto-generated method stub
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
// TODO Auto-generated method stub
}
public abstract void onItemSelected(AdapterView newValue);
}
Hier ist meine Ansicht Modell:
public class Diver extends BaseObservable {
...
@Bindable
public AdapterView.OnItemSelectedListener getOnSpinnerChanged() {
return new MySpinnerWatcher() {
@Override
public void onItemSelected(AdapterView newValue) {
// This never gets executed
hasDataChanged = true;
}
};
}
}
Hier mein Layout ist:
<android.support.v7.widget.AppCompatSpinner
android:id="@+id/spinnerGender"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:entries="@array/gender_arrays"
android:prompt="@string/gender_prompt"
app:setOnItemSelectedListener="@{diverdb.getOnSpinnerChanged}"
style="@style/Widget.AppCompat.Spinner.Underlined"/>
Jede Idee, wie man das Feuer onItemSelected() wenn der Wert im Spinner geändert wird?