2012-07-12 65 views
1

我使用下面的代码,以阻止重新加载网页Android的方向变化的WebView

public class MainActivity extends Activity { 


WebView webView; 

@Override 


protected void onSaveInstanceState(Bundle outState) { 


    WebView webView1 = (WebView)findViewById(R.id.webView); 
    webView1.saveState(outState); 


}  

@SuppressLint("SetJavaScriptEnabled") 
@Override 
public void onCreate(Bundle savedInstanceState) { 


    super.onCreate(savedInstanceState); 

    setContentView(R.layout.activity_main); 

    webView = (WebView)findViewById(R.id.webView); 

    String url="http://www.google.com"; 


      if (savedInstanceState != null) 
         { 
       ((WebView)findViewById(R.id.webView)).restoreState(savedInstanceState); 
         } 
      else{ 

      webView.setWebViewClient(new WebViewClient() { 


     public void onPageFinished(WebView view, String url) { 

      String name = MainActivity.this.webView.getTitle(); 
      TextView t=(TextView)findViewById(R.id.title); 

      t.setText(name); 
      Toast.makeText(getApplicationContext(), name, Toast.LENGTH_SHORT).show(); 


     } 
    }); 



    final Activity activity = this; 

    final ProgressDialog progressDialog = new ProgressDialog(activity); 
    progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); 
    progressDialog.setMessage("Loading..."); 
    progressDialog.setCancelable(false); 

    final ProgressBar progressBar = (ProgressBar)findViewById(R.id.progressBar1); 


    webView.getSettings().setJavaScriptEnabled(true); 
    webView.getSettings().setDomStorageEnabled(true); 
    webView.getSettings().setUserAgentString("Android"); 
    webView.setWebChromeClient(new WebChromeClient() 
    { 
     public void onProgressChanged(WebView view, int progress) { 

       progressBar.setVisibility(View.VISIBLE); 
       progressDialog.setProgress(0); 
       activity.setProgress(progress * 1000); 

       progressDialog.incrementProgressBy(progress); 

       if(progress > 75) 
        progressBar.setVisibility(View.GONE); 
      } 
    } 
      ); 


    webView.loadUrl(url); 

      } 

,并在我的清单文件

使用android:configChanges="orientation|keyboard|keyboardHidden"但是当我运行它,并改变我的手机的方向。

页面仍然重新加载并且进度条开始显示并且从不关闭。

任何人都可以告诉我这是怎么回事?

+0

您可以发布您的布局xml文件也。所以同时我会尝试测试你的代码。 – 2012-07-14 16:36:39

+0

此代码正在使用姜饼,但无法在ICS上工作 – Badal 2012-07-14 17:40:45

+0

ICS OS 4.0.0有一些问题。尝试使用OS 4.0.3或其他操作系统。 – 2012-07-15 07:09:53

回答

1

默认情况下,活动在定位更改时重新创建。但是您可以通过在AndroidManifest.xml中声明您的活动并设置活动类的方法来设置android:configChanges="keyboardHidden|orientation来更改它。

+0

我已经这样做了,我已经编辑了我的问题 – Badal 2012-07-12 09:41:08

+0

你在'onConfigurationChanged()'方法中放了什么? – fiddler 2012-07-12 09:43:08

+0

'super.onConfigurationChanged(newConfig);' – Badal 2012-07-12 09:44:06

0

您需要使用configChanges属性作为清单文件中的Activity。 因此,在每个活动的Manifest文件中使用下面的代码。

<activity android:name=".YOUR_ACTIVITY_NAME" android:configChanges="orientation|keyboard|keyboardHidden"/> 

当你不使用configChanges然后onCreate()方法再次调用当设备方向更改或其他配置更改。

+0

我已经做到了,现在我已经编辑了我的问题。 – Badal 2012-07-12 09:42:59

+0

评论或从您的活动代码 – 2012-07-12 09:44:52

+0

删除onConfigurationChanged()也试过。 – Badal 2012-07-12 09:45:34

1

只是把这个在您的清单活动

android:configChanges="keyboardHidden|orientation" 

它的工作对我来说

1

请添加屏幕尺寸也在清单机器人:configChanges =“方向|键盘|屏幕尺寸”

0

在我其中WebView在片段中的代码:

In manifest:

<activity 
... 
android:configChanges="orientation|keyboard|screenSize" 
... /> 

在活动:

@Override 
public void onConfigurationChanged(Configuration newConfig) { 
    super.onConfigurationChanged(newConfig); 
} 

在片段:

@Override 
public void onSaveInstanceState(Bundle outState) { 
    super.onSaveInstanceState(outState); 
    webView.saveState(outState); 
} 
@Override 
public void onActivityCreated(Bundle savedInstanceState) { 
    super.onActivityCreated(savedInstanceState); 
    if (savedInstanceState == null) 
     webView.loadUrl("about:blank"); 
    else 
     webView.restoreState(savedInstanceState); 
} 

,当方向改变它的平滑地改变。

1

试试这个

在活动标签,舱单

android:screenOrientation="sensor" 
     android:configChanges="keyboardHidden|orientation|screenSize" 

的Java

@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. 
}