Domanda

Domanda

Come si salva lo stato di istanza del widget di visualizzazione quando, utilizzando i layout del widget definiti con XML, i componenti delle singole istanze del widget hanno tutti lo stesso ID?

Esempio

Prendi, ad esempio, il NumberPicker widget che viene usato in TimePicker widget (nota che NumberPicker non è esposto all'SDK). Questo è un semplice widget con tre componenti gonfiati da number_picker.xml: un pulsante di incremento, un pulsante di decremento e uno EditText dove è possibile inserire direttamente un numero. Affinché il codice interagisca con questi widget, hanno tutti ID (R.id.increment, R.id.decrement e R.id.timepicker_input rispettivamente).

Diciamo che ne hai tre NumberPickers in un layout XML e tu dai loro ID distinti (ad es. R.id.hour, R.id.minute) .¹ Questo layout viene quindi gonfiato alla vista del contenuto di un'attività. Decidiamo di cambiare l'orientamento dell'attività, quindi Activity.onSaveInstanceState(Bundle) Salva utile il nostro stato di vista per ogni vista che ha un ID (questo è il comportamento predefinito).

Sfortunatamente, i tre NumberPickerradersi EditTexts che condividono tutti lo stesso ID - R.id.timepicker_input. Pertanto, quando l'attività viene ripristinata, quella più lontana nella gerarchia vista è quella il cui stato sembra essere preservato per tutti e tre. Inoltre, l'attenzione si concentra al primo NumberPicker Quando è stato ripristinato indipendentemente da quale si focalizzava quando era salvato.

TimePicker Resta in giro questo problema preservando lo stato stesso, separatamente. Sfortunatamente, questo non preserverà la posizione del cursore o la visione focalizzata senza molto più lavoro. Non sono sicuro di come preserva quello stato se lo fa affatto (e giocare rapidamente con un dialogo di input del tempo sembra indicare che può in qualche modo).

Si prega di consultare il codice di esempio per dimostrare questo problema:https://github.com/xxv/androidnumberpickerbug


¹ Nella gerarchia Visualizza, questo imposta l'ID del LinearLayout Quello NumberPicker si estende ai tuoi ID.

Nessuna soluzione corretta

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top