Se hai layout diversi per port/land lo devi riapplicare altrimenti rimane tutto inalterato
Se hai layout diversi per port/land lo devi riapplicare altrimenti rimane tutto inalterato
esatto, mi pare che il problema per cui ho scartato questo metodo fosse proprio questo. Se utilizzo layout diversi per land o port in questo modo non lo potrei più fare.
non ho capito cosa vuoi dire... ti puoi spiegare anche in base alla mia risposta? cioè forse l'ho capito ma vorrei esserne sicuro, grazie.
Voglio dire che in onConfigurationChanged puoi richiamare setContentView per riapplicare il layout, che quindi cambia ma senza distruggerti e ricrearti l'activity con tutto ciò che ne consegue
Poi, ad esempio, a me capita di fare layout diversi solo per le list view, quindi in onConfigrationChanged, invece di riapplicare il layout, semplicemente creo un nuovo adapter per la listview che quindi viene ridisegnata con il layout giusto
si infatti era come immaginavo.
L'unica limitazione almeno dal mio punto di vista, per altri può non esserlo, è che così facendo sono costretto ad avere tutti i layout, anche quelli eventualmente per il landscappe nella solita cartella layout, se invece lavoro con layout-port e layout-land perdo questa "caratteristica" dei layout separati.
Cmq alla fine sono riuscito a gestire anche la rotazione con onRetainNonConfigurationInstance(), l'importante è mantenere sempre il putnatore all'activity attiva dove si lavora sulla GUI e con i layout.
Come ti ho detto io i layout li tieni in layout-land e layout-port, non c'è bisogno di tenerli tutti insieme
se ho due layout per l'activity di partenza uno landscape ed uno portrait, come faccio a verificare con quale orientamento viene lanciata l'applicazione. Ovvero se lancio l'activity con il dispositivo orientato in landscape come faccio a verificarlo nel metodo onCreate. Grazie
funziona, testato in questo modo:
TextView tv = new TextView(this);
try {
Configuration config = getResources().getConfiguration();
if (config.orientation == Configuration.ORIENTATION_LANDSCAPE) {
tv.setText("All'avvio dispositivo in landscape");
}
else if (config.orientation == Configuration.ORIENTATION_PORTRAIT) {
tv.setText("All'avvio dispositivo in portrait");
}
else tv.setText("Configuration.orientation non rilevata");
} catch (Throwable t) {
tv.setText("rilevata eccezione");
}
setContentView(tv);
ottimo!