Pregunta
¿Cómo se puede guardar, ver estado de la instancia del widget cuando, mediante el uso de diseños de widgets XML definidos, los componentes de los casos individuales de widgets todos tienen el mismo ID?estado de ahorro de piensos compuestos Vea los aparatos
Ejemplo
Tomemos, por ejemplo, el widget NumberPicker
que se utiliza en el widget TimePicker
(tenga en cuenta que NumberPicker
no está expuesto a la SDK). Este es un widget simple con tres componentes que se inflan desde number_picker.xml
: un botón de incremento, un botón de disminución y otro EditText
donde puede ingresar un número directamente. Para que el código interactúe con estos widgets, todos tienen ID (R.id.increment
, R.id.decrement
y R.id.timepicker_input
, respectivamente).
Digamos que usted tiene tres NumberPicker
s en un diseño de XML y se les da identificadores distintos (por ejemplo. R.id.hour
, R.id.minute
) .¹ Esta disposición se infla a la vista del contenido de una actividad. Decidimos cambiar la orientación de la actividad, por lo que Activity.onSaveInstanceState(Bundle)
guarda nuestro estado de vista para cada vista que tenga una ID (este es el comportamiento predeterminado).
Desafortunadamente, las tres NumberPicker
s tienen s que comparten la misma ID - R.id.timepicker_input
. Por lo tanto, cuando se restaura la actividad, la que está más abajo en la jerarquía de vista es aquella cuyo estado parece conservarse para los tres. Además, el foco va al primer NumberPicker
cuando se restaura independientemente de cuál haya tenido foco cuando se guarde.
TimePicker
soluciona este problema conservando el estado por separado. Desafortunadamente, esto no conservará la posición del cursor o la vista enfocada sin mucho más trabajo. No estoy seguro de cómo conserva ese estado si lo hace en absoluto (y jugar rápidamente con un cuadro de diálogo de entrada de tiempo parece indicar que puede hacerlo de alguna manera).
Por favor, vea el código de ejemplo para demostrar este problema: https://github.com/xxv/AndroidNumberPickerBug
¹ En la jerarquía de vistas, esto establece el ID de la LinearLayout
que NumberPicker
se extiende a sus documentos de identidad.
amablemente allanan la pregunta. es un dolor leer esto ahora – Javanator
@Javanator: Lo reescribí, con suerte esta vez más claramente. Nota para mí: no escriba preguntas complejas de SA a las 4AM. –
Parece que hay un error en Android debido a este problema. El widget TimePicker no maneja esto correctamente: http://code.google.com/p/android/issues/detail?id=5483 –