studio programacion herramientas fundamentos con avanzado aplicaciones android android-viewpager android-view

programacion - Android View onSaveInstanceState no llamado



manual de android en pdf (2)

La respuesta fácil: es porque no estaba estableciendo la identificación en mi vista (personalizada o no). Android no administró onSaveInstanceState/onRestoreInstanceState si no se ha establecido ningún id para la vista.

Así que como mi vista personalizada extendía la Vista base, sin propiedad adicional, establecer una ID para la vista resolvió el problema y así se llama a onSaveInstanceState / onRestoreInstanceState como debería.

Entonces, para resumir, use uno de este enfoque:

de XML

<ScrollView android:layout_width="match_parent" android:layout_height="wrap_content" ... android:id="@+id/scrollView"> </ScrollView>

O desde Java

yourCustomView.setId(R.id.myCustomView);

es el último caso, agregue ID estático a res / values ​​/ ids.xml <item name="myCustomView" type="id"/>

Estoy trabajando con CustomView que extiende algunas vistas de Android como FrameLayout. En mi diseño, uso ViewPager con un PagerAdapter personalizado.

El problema es que mi Vista no restableció su estado cuando el fragmento se vuelve a adjuntar a ViewPager / Activity. Por ejemplo, tengo tres fragmentos, si deslizo el dedo hacia el último y vuelvo al primero, el ScrollView no está donde lo dejé: está de vuelta al valor predeterminado, en la parte superior.

Sé que con un PagerAdapter, no todos los fragmentos están activos al mismo tiempo, básicamente juste el + 1 / -1.

No puedo encontrar por qué no se llama a mi View.onSaveInstanceState (), así como onRestoreInstanceState.


Ahorro de estado por defecto

Ahora tenemos todo en su lugar para que nuestra vista guarde y restaure su estado. Sin embargo, esto no sucederá por defecto. Si desea instancias de su vista para guardar el estado automáticamente, puede agregar esta línea al método init:

setSaveEnabled(true);

Si usted hace o no esto, depende de usted. Incluso si su vista no guarda el estado por defecto, los usuarios de la vista siempre pueden habilitar el estado de ahorro llamando a setSaveEnabled (true), o especificando android: saveEnabled = "true" en el layout xml.