2015-09-04 118 views
1

我想阻止时,朝向变化的WebView重新加载页面每次。安卓:webView的处理方向更改

我已经按照下面的教程:

http://www.devahead.com/blog/2012/01/preserving-the-state-of-an-android-webview-on-screen-orientation-change

但它调用onCreate()方法eveytime并获取页面阿恩和试。

DisplayResult.java:

public class DisplayResult extends AppCompatActivity 
{ 
protected FrameLayout webViewPlaceholder; 


protected WebView webView; 
protected Uri url; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.display_result); 
    url = Uri.parse(getIntent().getStringExtra("Url")); 
    initUI(); 
    Toast.makeText(DisplayResult.this ,"Oncreate",Toast.LENGTH_SHORT).show(); 
} 


protected void initUI() 
{ 
    webViewPlaceholder =(FrameLayout)findViewById(R.id.webViewPlaceholder); 
    if(webView==null) 
    { 

     //webView = (WebView) findViewById(R.id.webview); 
     webView = new WebView(this); 
     // webView.getSettings().setLoadWithOverviewMode(true); 
     webView.getSettings().setUseWideViewPort(true); 
     webView.getSettings().setSupportZoom(true); 
     webView.getSettings().setBuiltInZoomControls(true); 
     webView.getSettings().setDisplayZoomControls(false); 
     //webView.getSettings().setTextZoom(0); 
     webView.setWebViewClient(new Callback()); 
     webView.loadUrl(url.toString()); 

    } 
    webViewPlaceholder.addView(webView); 
} 

private class Callback extends WebViewClient { 
    MaterialDialog m ; 

    @Override 
    public boolean shouldOverrideUrlLoading(WebView view, String url) { 
     return(false); 
    } 

    @Override 
    public void onPageStarted(WebView view, String url, Bitmap facIcon) { 

     m=new MaterialDialog.Builder(DisplayResult.this) 
       .title("Fetching Result") 
       .content("Please wait...") 
       .progress(true,0) 

       .show(); 
    } 
    @Override 
    public void onPageFinished(WebView view, String url){ 
     m.cancel(); 
    } 
} 

@Override 
protected void onSaveInstanceState(Bundle outState){ 
    super.onSaveInstanceState(outState); 

    webView.saveState(outState); 
} 

@Override 
protected void onRestoreInstanceState(Bundle savedInstanceState) { 
    super.onRestoreInstanceState(savedInstanceState); 
    webView.restoreState(savedInstanceState); 
} 

@Override 
public void onConfigurationChanged(Configuration newConfig){ 
    if(webView==null) 
    { 
     webViewPlaceholder.removeView(webView); 
    } 
    super.onConfigurationChanged(newConfig); 
    setContentView(R.layout.display_result); 
    url = Uri.parse(getIntent().getStringExtra("Url")); 
    initUI(); 
} 

} 

和我的布局文件:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
> 
<FrameLayout 
    android:id="@+id/webViewPlaceholder" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"></FrameLayout> 

</LinearLayout> 

我还添加了清单文件:

<activity 
     android:name=".DisplayResult" 
     android:configChanges="keyboard|keyboardHidden|orientation" 
     android:label="@string/display" 
     android:parentActivityName=".MainActivity" /> 

不过它不工作。谁能帮我解决办法:

我也试过:

Android Webview Handling Orientation Not Working

回答

1
@Override 
public void onConfigurationChanged(Configuration newConfig){ 
if(webView==null) 
{ 
    webViewPlaceholder.removeView(webView); 
} 
super.onConfigurationChanged(newConfig); 
setContentView(R.layout.display_result); 
url = Uri.parse(getIntent().getStringExtra("Url")); 
initUI(); 
} 

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

它的工作不:( – Prabhakar

+0

现在发生了什么? – Android

+0

呀。工作!你能解释一下什么是错的? – Prabhakar

3

替换此您没有添加screenSizeconfigChanges

Android Docs

一些设备配置可以在运行过程中改变(例如,屏幕取向,键盘可用性和语言)。当发生这种变化时,Android会重新启动正在运行的Activity(onDestroy()被调用,接下来是onCreate())。重新启动行为旨在通过使用与新设备配置相匹配的备用资源自动重新加载应用程序来帮助您的应用程序适应新的配置。

和:

注意:与Android 3.2(API级13)开始, “画面尺寸” 也改变时纵向和横向之间的设备切换。因此,如果你想防止因方向改变运行时重新启动了API等级13以上的开发时(以作为的minSdkVersion声明和targetSdkVersion属性),您必须包括除“方向”值“屏幕尺寸”的价值。也就是说,您必须声明android:configChanges="orientation|screenSize。但是,如果您的应用程序的目标级别为12或更低,则您的活动始终会自行处理此配置更改(即使在Android 3.2或更高版本的设备上运行,此配置更改也不会重新启动您的活动)。

考虑到这一点,以防止onCreate()被称为每次你改变方向的时候,你就必须添加android:configChanges="orientation|screenSize"到AndroidManifest。