Ho una piccola webView in uno dei miei layout che fungono da feed di notizie dal mio sito Web. Ogni volta che ho cambiato la rotazione, ricaricherei la pagina web.come posso salvare lo stato della mia webview quando cambi orientamento usando un webviewfragment
così ho modificato il codice per includere un cambio di configurazione e lo stato di ripristino. Quindi ho regolato il mio manifest Android per includere le modifiche di configurazione che dal sito dev dicono di includere l'orientamento e le dimensioni dello schermo.
Questo risolve il problema del salvataggio dello stato, ma a sua volta crea un nuovo problema che è che ho layout di dimensioni diverse per quando è in modalità orizzontale su determinati dispositivi. ma con il manifest impostato come sostituisce la dimensione dello schermo. è lì per salvare lo stato ma senza usare la dimensione dello schermo nel mio manifest. quindi potrei usare il mio layout di paesaggio
ecco il mio codice per le modifiche di orientamento.
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
// Checks the orientation of the screen
if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
Toast.makeText(this, "landscape", Toast.LENGTH_SHORT).show();
} else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) {
Toast.makeText(this, "portrait", Toast.LENGTH_SHORT).show();
}
}
@Override
public void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.activity_homescreen);
if (savedInstanceState != null)
((WebView)findViewById(R.id.neweview)).restoreState(savedInstanceState);
svHomeScreen = (ScrollView) findViewById(R.id.svHomeScreen);
svHomeScreen.setScrollbarFadingEnabled(false);
wv = (WebView) findViewById(R.id.neweview
);
wv.setScrollbarFadingEnabled(false);
wv.getSettings().setJavaScriptEnabled(true);
wv.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
wv.getSettings().setRenderPriority(WebSettings.RenderPriority.NORMAL);
wv.getSettings().setLoadsImagesAutomatically(true);
wv.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT);
if (Build.VERSION.SDK_INT >= 19) {
// chromium, enable hardware acceleration
wv.setLayerType(View.LAYER_TYPE_HARDWARE, null);
} else {
// older android version, disable hardware acceleration
wv.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
}
wv.canGoBackOrForward(5);
wv.getSettings().setLoadWithOverviewMode(true);
wv.getSettings().setUseWideViewPort(true);
wv.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);
wv.setPadding(0, 0, 0, 0);
wv.loadUrl(NEWS);
poi il mio file manifesto ha
<activity
android:name=".Homescreen"
android:label="@string/title_activity_homescreen"
android:configChanges="keyboard|keyboardHidden|orientation|screenSize"
/>
ive ha aggiunto un contenitore di un frammento vista web, ma ora la vista scompare quando la rotazione è il paesaggio. poi scompare completamente quando torno indietro. così ho provato ad aggiungere lo stato e SaveState salva dalla ad esso, che caricato il WebView quando viene ruotato di paesaggio, ma si è schiantato l'applicazione quando si va di nuovo al ritratto
Avete provato ad aggiungere 'Android: configChanges = "orientamento | Screensize"' nel tag '' (manifesto)? –
sì lo ha provato e salva lo stato ma sovrascrive le mie schermate e questo è il mio problema se elimino l'opzione | screensize che ritorna indietro per non salvare lo stato –
Si potrebbe provare a collocarlo all'interno di un frammento - i frammenti non vengono ricreati come brutalmente come Attività quando lo schermo viene ruotato. Potresti scoprire che la webview all'interno di un frammento sopravvive perfettamente alla rotazione. – adelphus