Wenn ich meinen Bildschirm drehe, lädt das WebView die gesamte Seite neu. Ich kann das nicht haben, da einige meiner Inhalte dynamisches / zufälliges Material enthalten. Derzeit lädt der Bildschirm beim Drehen die ursprüngliche URL von der loadUrl () -Methode neu.
Irgendeine Idee, was mit meinem Code nicht stimmt?
MainActivity.java
package com.mark.myapp;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;
import android.view.Menu;
import android.webkit.WebView;
import android.webkit.WebViewClient;
public class MainActivity extends Activity {
WebView web;
String webURL = "http://www.google.co.uk/";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (savedInstanceState != null)
((WebView)findViewById(R.id.web)).restoreState(savedInstanceState);
web = (WebView) findViewById(R.id.web);
web.getSettings().setJavaScriptEnabled(true);
web.loadUrl(webURL);
web.setPadding(0, 0, 0, 0);
web.getSettings().setLoadWithOverviewMode(true);
web.getSettings().setUseWideViewPort(true);
web.getSettings().setSupportZoom(true);
web.getSettings().setBuiltInZoomControls(true);
web.setWebViewClient(new HelloWebViewClient());
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
private class HelloWebViewClient extends WebViewClient {
public boolean shouldOverrideUrlLoading(WebView web, String url) {
web.loadUrl(url);
return true;
}
}
public boolean onKeyDown(int keyCode, KeyEvent event) {
if ((keyCode == KeyEvent.KEYCODE_BACK) && web.canGoBack()) {
web.goBack();
return true;
}
return super.onKeyDown(keyCode, event);
}
}
AndroidManifest.xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.mark.myapp"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="15" />
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".MainActivity"
android:configChanges="orientation|keyboardHidden">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
<uses-permission android:name="android.permission.INTERNET"/>
</manifest>
java
android
android-webview
Kennzeichen
quelle
quelle
Antworten:
Ich denke, das Hauptproblem ist, dass Sie web.loadUrl (webURL) aufrufen; auch wenn savedInstanceState! = null
BEARBEITEN
Versuchen:
EDIT2 : Sie benötigen außerdem die Überschreibung onSaveInstanceState und onRestoreInstanceState.
Hinweis: Bitte fügen Sie auch Ihre AndroidManifest.xml in Ihrer Aktivität android hinzu: configChanges = "Orientierung | Bildschirmgröße" Danke
quelle
Keine Java-Codierung erforderlich. Verwenden Sie dies in Ihrer Manifestdatei.
mögen:
quelle
im Tag (Manifest)
quelle
onConfigurationChanged
Methode zu überschreiben , da keine benutzerdefinierten Funktionen hinzugefügt wurden. Die Änderung in der Manifestdatei einfach vorzunehmen, hat mir geholfen.orientation|screenSize
Das Hinzufügen
android:configChanges="orientation|screenSize"
in Manifest funktioniert für michquelle
Ich glaube nicht, dass das mehr funktionieren wird. In meinem Fall
WebView.restore(Bundle savedInstanceState)
löst das Wiederherstellen des Status mithilfe von immer noch ein erneutes Laden der URL aus.Mit Blick auf die Dokumente für
restoreState()
Sie sagt es sehen werden:und
Wir bitten @ e4c5, mich in seiner Antwort in die richtige Richtung zu weisen
Und natürlich wäre die extreme Vorgehensweise, zu verhindern, dass Orientierungsänderungen die Zerstörung / Schaffung von Aktivitäten auslösen. Eine Dokumentation dazu finden Sie hier
quelle
Fügen Sie diesen Code in Manifest hinzu
quelle
Überschreiben Sie die
onConfigChange
Methode, um ein erneutes Laden von Daten bei Orientierungsänderungen zu vermeidenauf Ihre Aktivität in
AndroidMainfest
Datei.und haben Sie diese auch in Ihren WebView-Einstellungen
quelle
Versuchen Sie dies in Ihrer Manifestdatei:
quelle
Fügen Sie dies in die Aktivität der Datei Manifest.xml ein:
Hier ist ein Beispiel:
quelle
Wie hier zitiert ,
Durch Festlegen
android:configChanges="orientation|screenSize"
Ihrer Aktivität wird dieses Problem behoben.Beachten Sie auch Folgendes
quelle
Diese Lösung funktioniert gut für mich:
(1) Fügen Sie in AndroidManifest.xml diese Zeile hinzu.
So (und wie die obigen Antworten)
(2) Überprüfen Sie dann in MainActivity.java savedInstanceState
(3) und dann:
quelle
Fügen Sie dies in Androidmanifest.xml hinzu:
Wenn sich eine dieser Konfigurationen ändert,
MyActivity
wird sie nicht neu gestartet.MyActivity
Erhält stattdessen einen Anruf anonConfigurationChanged()
.Füge das hinzu:
quelle