समस्या रोटेशन के बाद का प्रदर्शन है। WebView को पृष्ठ को फिर से लोड करना है, जो थोड़ा थकाऊ हो सकता है।
हर बार स्रोत से पृष्ठ पुनः लोड किए बिना अभिविन्यास परिवर्तन को संभालने का सबसे अच्छा तरीका क्या है?
समस्या रोटेशन के बाद का प्रदर्शन है। WebView को पृष्ठ को फिर से लोड करना है, जो थोड़ा थकाऊ हो सकता है।
हर बार स्रोत से पृष्ठ पुनः लोड किए बिना अभिविन्यास परिवर्तन को संभालने का सबसे अच्छा तरीका क्या है?
जवाबों:
यदि आप नहीं चाहते कि WebView अभिविन्यास परिवर्तनों पर पुनः लोड हो, तो केवल आपकी गतिविधि वर्ग में onConfigurationChanged ओवरराइड करें:
@Override
public void onConfigurationChanged(Configuration newConfig){
super.onConfigurationChanged(newConfig);
}
और एंड्रॉइड सेट करें: कॉन्फिगरेशन में कॉन्फिगरेशन विशेषता:
<activity android:name="..."
android:label="@string/appName"
android:configChanges="orientation|screenSize"
अधिक जानकारी के लिए देखें:
http://developer.android.com/guide/topics/resources/runtime-changes.html#HandlingTheChange
https://developer.android.com/reference/android/app/Activity.html#ConfigurationChanges
configChanges
विशेषता उपवर्ग गतिविधि 2 में जुड़ जाती है) यदि आपका ऐप कई परियोजनाओं पर निर्भर करता है, तो configChanges
विशेषता एक के प्रकट होने के साथ जुड़ जाती है। निर्भरता पेड़ के ऊपर (जो गतिविधि वर्ग युक्त परियोजना नहीं हो सकती है)।
onConfigurationChanged
विधि ओवरराइड बेकार है।
संपादित करें: यह विधि अब डॉक्स में बताए अनुसार काम नहीं करती है
मूल उत्तर:
इसे onSaveInstanceState(Bundle outState)
आपकी गतिविधि में ओवरराइटिंग और saveState
वेबव्यू से कॉल करके नियंत्रित किया जा सकता है :
protected void onSaveInstanceState(Bundle outState) {
webView.saveState(outState);
}
फिर से अपने onCreate में इसे पुनर्प्राप्त करें जब वेबव्यू को फिर से फुलाया गया हो:
public void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.blah);
if (savedInstanceState != null)
((WebView)findViewById(R.id.webview)).restoreState(savedInstanceState);
}
इसका सबसे अच्छा उत्तर एंड्रॉइड प्रलेखन यहाँ पाया जा रहा है मूल रूप से यह वेबव्यू को फिर से लोड होने से रोकेगा:
<activity android:name=".MyActivity"
android:configChanges="keyboardHidden|orientation|screenSize|layoutDirection|uiMode"
android:label="@string/app_name">
वैकल्पिक रूप से , आप onConfigurationChanged
गतिविधि में ओवरराइड करके विसंगतियों (यदि कोई हो) को ठीक कर सकते हैं :
@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();
}
}
मैं का उपयोग कर की कोशिश की है onRetainNonConfigurationInstance (लौटने WebView ), तो यह हो रही है के साथ वापस आ getLastNonConfigurationInstance दौरान onCreate और यह फिर से बताए।
बस अभी तक काम करने के लिए प्रतीत नहीं होता है। मैं मदद नहीं कर सकता, लेकिन लगता है कि मैं वास्तव में करीब हूँ! अब तक, मुझे इसके बजाय केवल एक खाली / सफ़ेद पृष्ठभूमि वाला वेबव्यू मिलता है । यहाँ इस उम्मीद में पोस्ट कर रहा हूँ कि कोई इस फिनिश लाइन को पार करने में मदद कर सकता है।
हो सकता है कि मुझे WebView पास नहीं करना चाहिए । शायद WebView के भीतर से एक वस्तु ?
मैंने जिस दूसरी विधि की कोशिश की - मेरा पसंदीदा नहीं - इसे गतिविधि में सेट करना है:
android:configChanges="keyboardHidden|orientation"
... और फिर यहाँ बहुत कुछ नहीं करते हैं:
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
// We do nothing here. We're only handling this to keep orientation
// or keyboard hiding from causing the WebView activity to restart.
}
यह काम करता है, लेकिन इसे एक सर्वोत्तम अभ्यास नहीं माना जा सकता है ।
इस बीच, मेरे पास एक भी ImageView है जिसे मैं रोटेशन के आधार पर स्वचालित रूप से अपडेट करना चाहता हूं। यह बहुत आसान हो जाता है। मेरी तहत res
फ़ोल्डर, मेरे पास है drawable-land
और drawable-port
पकड़ परिदृश्य / चित्र रूपांतरों के लिए, तो मैं का उपयोग R.drawable.myimagename
के लिए imageView Yay - के स्रोत और एंड्रॉयड "सही काम करता है"!
... जब आप कॉन्फ़िगर परिवर्तनों को देखते हैं, तब इसे छोड़कर नहीं। :(
तो मैं मुश्किलों में हूँ। OnRetainNonConfigurationInstance और ImageView रोटेशन कार्यों का उपयोग करें , लेकिन WebView दृढ़ता का उपयोग नहीं करता है ... या onConfigurationChanged और WebView का उपयोग स्थिर रहता है, लेकिन ImageView अपडेट नहीं करता है। क्या करें?
एक आखिरी नोट: मेरे मामले में, अभिविन्यास मजबूर करना स्वीकार्य समझौता नहीं है। हम वास्तव में सुंदर रूप से रोटेशन का समर्थन करना चाहते हैं। Android ब्राउज़र ऐप कैसे करता है जैसे किंडा! ;)
ओरिएंटेशन परिवर्तनों को रोकने का सबसे अच्छा तरीका और रोटेट पर WebView रीलोड को रोकना।
@Override
public void onConfigurationChanged(Configuration newConfig){
super.onConfigurationChanged(newConfig);
}
उस समय के साथ, onCreate () को हर बार जब आप अभिविन्यास बदलते हैं, तब आपको रोकने के लिए जोड़ना होगा android:configChanges="orientation|screenSize" to the AndroidManifest.
या केवल ..
android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"`
अपनी मैनिफ़ेस्ट फ़ाइल में बस निम्नलिखित कोड लाइनें लिखें - और कुछ नहीं। यह सचमुच काम करता है:
<activity android:name=".YourActivity"
android:configChanges="orientation|screenSize"
android:label="@string/application_name">
मैं सराहना करता हूं कि यह थोड़ी देर है, हालांकि यह वह उत्तर है जिसका उपयोग मैंने अपने समाधान को विकसित करते समय किया था:
AndroidManifest.xml
<activity
android:name=".WebClient"
android:configChanges="keyboard|keyboardHidden|orientation|screenSize" <--- "screenSize" important
android:label="@string/title_activity_web_client" >
</activity>
WebClient.java
public class WebClient extends Activity {
protected FrameLayout webViewPlaceholder;
protected WebView webView;
private String WEBCLIENT_URL;
private String WEBCLIENT_TITLE;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_web_client);
initUI();
}
@SuppressLint("SetJavaScriptEnabled")
protected void initUI(){
// Retrieve UI elements
webViewPlaceholder = ((FrameLayout)findViewById(R.id.webViewPlaceholder));
// Initialize the WebView if necessary
if (webView == null)
{
// Create the webview
webView = new WebView(this);
webView.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT, ViewGroup.LayoutParams.FILL_PARENT));
webView.getSettings().setSupportZoom(true);
webView.getSettings().setBuiltInZoomControls(true);
webView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);
webView.setScrollbarFadingEnabled(true);
webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setPluginState(android.webkit.WebSettings.PluginState.ON);
webView.getSettings().setLoadsImagesAutomatically(true);
// Load the URLs inside the WebView, not in the external web browser
webView.setWebViewClient(new SetWebClient());
webView.setWebChromeClient(new WebChromeClient());
// Load a page
webView.loadUrl(WEBCLIENT_URL);
}
// Attach the WebView to its placeholder
webViewPlaceholder.addView(webView);
}
private class SetWebClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.web_client, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}else if(id == android.R.id.home){
finish();
return true;
}
return super.onOptionsItemSelected(item);
}
@Override
public void onBackPressed() {
if (webView.canGoBack()) {
webView.goBack();
return;
}
// Otherwise defer to system default behavior.
super.onBackPressed();
}
@Override
public void onConfigurationChanged(Configuration newConfig){
if (webView != null){
// Remove the WebView from the old placeholder
webViewPlaceholder.removeView(webView);
}
super.onConfigurationChanged(newConfig);
// Load the layout resource for the new configuration
setContentView(R.layout.activity_web_client);
// Reinitialize the UI
initUI();
}
@Override
protected void onSaveInstanceState(Bundle outState){
super.onSaveInstanceState(outState);
// Save the state of the WebView
webView.saveState(outState);
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState){
super.onRestoreInstanceState(savedInstanceState);
// Restore the state of the WebView
webView.restoreState(savedInstanceState);
}
}
यह 2015 है, और कई लोग एक समाधान की तलाश कर रहे हैं जो अभी भी जेलीबीन, केके और लॉलीपॉप फोन पर काम करता है। बहुत संघर्ष करने के बाद मैंने आपको अभिविन्यास बदलने के बाद वेबव्यू बरकरार रखने का एक तरीका मिल गया। मेरी रणनीति मूल रूप से एक अलग वर्ग में एक अलग स्थिर चर में वेब स्टोर को स्टोर करने के लिए है। फिर, यदि रोटेशन होता है, तो मैं गतिविधि से वेबव्यू को अलग कर देता हूं, ओरिएंटेशन समाप्त होने की प्रतीक्षा करता हूं, और वेबव्यू को फिर से गतिविधि पर रीटच करता हूं। उदाहरण के लिए ... पहले इसे अपने मैनिफ़ेस्ट पर डालें (कीबोर्डहेड और कीबोर्ड वैकल्पिक हैं):
<application
android:label="@string/app_name"
android:theme="@style/AppTheme"
android:name="com.myapp.abc.app">
<activity
android:name=".myRotatingActivity"
android:configChanges="keyboard|keyboardHidden|orientation">
</activity>
एक अलग आवेदन पत्र में, डाल:
public class app extends Application {
public static WebView webview;
public static FrameLayout webviewPlaceholder;//will hold the webview
@Override
public void onCreate() {
super.onCreate();
//dont forget to put this on the manifest in order for this onCreate method to fire when the app starts: android:name="com.myapp.abc.app"
setFirstLaunch("true");
}
public static String isFirstLaunch(Context appContext, String s) {
try {
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(appContext);
return prefs.getString("booting", "false");
}catch (Exception e) {
return "false";
}
}
public static void setFirstLaunch(Context aContext,String s) {
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(aContext);
SharedPreferences.Editor editor = prefs.edit();
editor.putString("booting", s);
editor.commit();
}
}
गतिविधि पुट में:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if(app.isFirstLaunch.equals("true"))) {
app.setFirstLaunch("false");
app.webview = new WebView(thisActivity);
initWebUI("www.mypage.url");
}
}
@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
restoreWebview();
}
public void restoreWebview(){
app.webviewPlaceholder = (FrameLayout)thisActivity.findViewById(R.id.webviewplaceholder);
if(app.webviewPlaceholder.getParent()!=null&&((ViewGroup)app.webview.getParent())!=null) {
((ViewGroup) app.webview.getParent()).removeView(app.webview);
}
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.FILL_PARENT, RelativeLayout.LayoutParams.FILL_PARENT);
app.webview.setLayoutParams(params);
app.webviewPlaceholder.addView(app.webview);
app.needToRestoreWebview=false;
}
protected static void initWebUI(String url){
if(app.webviewPlaceholder==null);
app.webviewPlaceholder = (FrameLayout)thisActivity.findViewById(R.id.webviewplaceholder);
app.webview.getSettings().setJavaScriptEnabled(true); app.webview.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
app.webview.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT, ViewGroup.LayoutParams.FILL_PARENT));
app.webview.getSettings().setSupportZoom(false);
app.webview.getSettings().setBuiltInZoomControls(true);
app.webview.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);
app.webview.setScrollbarFadingEnabled(true);
app.webview.getSettings().setLoadsImagesAutomatically(true);
app.webview.loadUrl(url);
app.webview.setWebViewClient(new WebViewClient());
if((app.webview.getParent()!=null)){//&&(app.getBooting(thisActivity).equals("true"))) {
((ViewGroup) app.webview.getParent()).removeView(app.webview);
}
app.webviewPlaceholder.addView(app.webview);
}
अंत में, सरल XML:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".myRotatingActivity">
<FrameLayout
android:id="@+id/webviewplaceholder"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
</RelativeLayout>
कई चीजें हैं जो मेरे समाधान में सुधार की जा सकती हैं, लेकिन मैंने पहले से ही बहुत समय बिताया है, उदाहरण के लिए: यदि SharedPreferences भंडारण का उपयोग करने के बजाय गतिविधि पहली बार शुरू की गई है, तो इसे सत्यापित करने का एक छोटा तरीका है। यह दृष्टिकोण आपको webview बरकरार (afaik), इसके टेक्स्टबॉक्स, लेबल, UI, जावास्क्रिप्ट चर और नेविगेशन राज्यों को संरक्षित करता है जो कि url द्वारा परिलक्षित नहीं होते हैं।
अद्यतन: वर्तमान रणनीति यह है कि जब अलग हो जाए और फिर से शुरू जोश करता है तो फिर से शुरू करने के बजाय वेबव्यू इंस्टेंस को अनुप्रयोग वर्ग में ले जाएं। एप्लिकेशन को बंद होने से रोकने के लिए, आपको अग्रभूमि सेवा का उपयोग करना चाहिए, यदि आप एप्लिकेशन के बीच उपयोगकर्ता स्विच करते समय स्थिति को बनाए रखना चाहते हैं।
यदि आप टुकड़े का उपयोग कर रहे हैं, तो आप WebView के अनुरक्षण उदाहरण का उपयोग कर सकते हैं। वेब दृश्य को कक्षा के उदाहरण सदस्य के रूप में रखा जाएगा। हालाँकि आपको OnCreateView में वेब दृश्य को संलग्न करना चाहिए और मूल कंटेनर से विनाश से बचाने के लिए OnDestroyView से पहले अलग होना चाहिए।
class MyFragment extends Fragment{
public MyFragment(){ setRetainInstance(true); }
private WebView webView;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = ....
LinearLayout ll = (LinearLayout)v.findViewById(...);
if (webView == null) {
webView = new WebView(getActivity().getApplicationContext());
}
ll.removeAllViews();
ll.addView(webView, new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
return v;
}
@Override
public void onDestroyView() {
if (getRetainInstance() && webView.getParent() instanceof ViewGroup) {
((ViewGroup) webView.getParent()).removeView(webView);
}
super.onDestroyView();
}
}
PS क्रेडिट्स kcoppock उत्तर पर जाते हैं
'SaveState ()' के लिए यह अब आधिकारिक प्रलेखन के अनुसार काम नहीं करता है :
कृपया ध्यान दें कि यह विधि अब इस WebView के लिए प्रदर्शन डेटा संग्रहीत नहीं करती है। यदि रिस्टोरस्ट (बंडल) को कभी नहीं बुलाया गया तो पिछला व्यवहार संभावित रूप से फ़ाइलों को लीक कर सकता है।
setRetainInstance
तक फ्रैगमेंट दृश्य को बनाए रखता है (और इसलिए WebView) अभी भी नष्ट हो जाता है।
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
}
@Override
protected void onRestoreInstanceState(Bundle state) {
super.onRestoreInstanceState(state);
}
किसी भी गतिविधि पर इन विधियों को ओवरराइड किया जा सकता है, यह मूल रूप से आपको हर बार किसी गतिविधि के बनने / नष्ट होने पर मूल्यों को सहेजने और पुनर्स्थापित करने की अनुमति देता है, जब स्क्रीन अभिविन्यास बदल जाता है गतिविधि पृष्ठभूमि में नष्ट हो जाती है और फिर से बनाई जाती है, इसलिए आप इन विधियों का उपयोग कर सकते हैं अस्थायी स्टोर / परिवर्तन के दौरान राज्यों को बहाल करना।
आपको निम्नलिखित दो तरीकों में गहराई से देखना चाहिए और देखना चाहिए कि क्या यह आपके समाधान के लिए उपयुक्त है।
http://developer.android.com/reference/android/app/Activity.html
पिछले Activity
संदर्भ को लीक किए बिना और इसे सेट किए बिना सबसे अच्छा समाधान मैंने पाया है configChanges
.. एक MutableContextWebpper का उपयोग करना है ।
मैंने इसे यहाँ लागू किया है: https://github.com/slightfoot/android-web-wrapper/blob/48cb3c48c457d889fc16b4e3eba1c9e925942cfb/WebWrapper/src/com/example/webwrapper/BrowserA
यह केवल एक चीज है जो मेरे लिए काम करती है (मैंने भी बचत की स्थिति का उपयोग किया onCreateView
था लेकिन यह उतना विश्वसनीय नहीं था)।
public class WebViewFragment extends Fragment
{
private enum WebViewStateHolder
{
INSTANCE;
private Bundle bundle;
public void saveWebViewState(WebView webView)
{
bundle = new Bundle();
webView.saveState(bundle);
}
public Bundle getBundle()
{
return bundle;
}
}
@Override
public void onPause()
{
WebViewStateHolder.INSTANCE.saveWebViewState(myWebView);
super.onPause();
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState)
{
View rootView = inflater.inflate(R.layout.fragment_main, container, false);
ButterKnife.inject(this, rootView);
if(WebViewStateHolder.INSTANCE.getBundle() == null)
{
StringBuilder stringBuilder = new StringBuilder();
BufferedReader br = null;
try
{
br = new BufferedReader(new InputStreamReader(getActivity().getAssets().open("start.html")));
String line = null;
while((line = br.readLine()) != null)
{
stringBuilder.append(line);
}
}
catch(IOException e)
{
Log.d(getClass().getName(), "Failed reading HTML.", e);
}
finally
{
if(br != null)
{
try
{
br.close();
}
catch(IOException e)
{
Log.d(getClass().getName(), "Kappa", e);
}
}
}
myWebView
.loadDataWithBaseURL("file:///android_asset/", stringBuilder.toString(), "text/html", "utf-8", null);
}
else
{
myWebView.restoreState(WebViewStateHolder.INSTANCE.getBundle());
}
return rootView;
}
}
मैंने WebView की स्थिति के लिए एक सिंगलटन धारक बनाया। जब तक आवेदन की प्रक्रिया मौजूद है, तब तक राज्य संरक्षित है।
संपादित करें: यह loadDataWithBaseURL
आवश्यक नहीं था, यह सिर्फ और सिर्फ के साथ काम किया
//in onCreate() for Activity, or in onCreateView() for Fragment
if(WebViewStateHolder.INSTANCE.getBundle() == null) {
webView.loadUrl("file:///android_asset/html/merged.html");
} else {
webView.restoreState(WebViewStateHolder.INSTANCE.getBundle());
}
हालाँकि मैंने पढ़ा है कि यह जरूरी नहीं है कि कुकीज़ के साथ अच्छा काम करें।
इसे इस्तेमाल करे
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.webkit.WebView;
import android.webkit.WebViewClient;
public class MainActivity extends AppCompatActivity {
private WebView wv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
wv = (WebView) findViewById(R.id.webView);
String url = "https://www.google.ps/";
if (savedInstanceState != null)
wv.restoreState(savedInstanceState);
else {
wv.setWebViewClient(new MyBrowser());
wv.getSettings().setLoadsImagesAutomatically(true);
wv.getSettings().setJavaScriptEnabled(true);
wv.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);
wv.loadUrl(url);
}
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
wv.saveState(outState);
}
@Override
public void onBackPressed() {
if (wv.canGoBack())
wv.goBack();
else
super.onBackPressed();
}
private class MyBrowser extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
}
}
यह पृष्ठ मेरी समस्या को हल करता है लेकिन मुझे प्रारंभिक एक में थोड़ा बदलाव करना होगा:
protected void onSaveInstanceState(Bundle outState) {
webView.saveState(outState);
}
इस हिस्से को मेरे लिए थोड़ी समस्या है। दूसरे ओरिएंटेशन पर null पॉइंटर के साथ समाप्त एप्लिकेशन को बदल दें
यह प्रयोग मेरे लिए काम किया:
@Override
protected void onSaveInstanceState(Bundle outState ){
((WebView) findViewById(R.id.webview)).saveState(outState);
}
आपको यह कोशिश करनी चाहिए:
onServiceConnected
विधि, WebView हो और फोन setContentView
अपने WebView रेंडर करने के लिए विधि।मैंने इसका परीक्षण किया और यह काम करता है लेकिन अन्य वेबव्यू जैसे कि XWalkView या GeckoView के साथ नहीं।
@Override
protected void onSaveInstanceState(Bundle outState )
{
super.onSaveInstanceState(outState);
webView.saveState(outState);
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState)
{
super.onRestoreInstanceState(savedInstanceState);
webView.restoreState(savedInstanceState);
}
मुझे यह समाधान पसंद है http://www.devahead.com/blog/2012/01/presinating-the-state-of-an-android-webview-on-screen-orientation-change/
इसके अनुसार हम WebView के उसी उदाहरण का पुन: उपयोग करते हैं। यह कॉन्फ़िगरेशन इतिहास को बचाने और कॉन्फ़िगरेशन परिवर्तन पर स्क्रॉल करने की अनुमति देता है।