gpt4 book ai didi

android - 防止 Chrome 在重新定位时重新加载页面?

转载 作者:行者123 更新时间:2023-11-29 01:59:27 25 4
gpt4 key购买 nike

这是我的第一个应用程序,它是一个网络应用程序,它只是将 webView 加载到发生事情的 url。

它在 android 浏览器(gingerbread)中工作正常,但在 Chrome(ICS,JB)中,当设备旋转时它会返回到初始 webView url。在 Gingerbread 中,您可以通过设置 android:configChanges="keyboard|keyboardHidden|orientation"并覆盖 onConfigurationChanged 来解决这个问题。

在网上搜索后,我按照此处的示例重新编写了原始 Activity :http://www.devahead.com/blog/2012/01/preserving-the-state-of-an-android-webview-on-screen-orientation-change/ ,您基本上可以自己处理重新定位。

但是现在当我旋转设备时我的应用程序崩溃了。

使用 Android 4.1.2 进行测试。

有人发现我的代码有问题吗?抱歉,如果答案很明显,但我已经在这个错误上停留了几天了。也许我只是需要另一双眼睛。提前致谢!

注意:@SuppressWarnings("deprecation") 行不在示例中,这是编辑器为了编译而建议的。

主要 Activity :

package com.example.xxx.xxx;

import android.os.Bundle;
import android.annotation.SuppressLint;
import android.app.ActionBar.LayoutParams;
import android.app.Activity;
import android.content.res.Configuration;
import android.view.Menu;
import android.view.ViewGroup;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.FrameLayout;

@SuppressLint("SetJavaScriptEnabled")
public class MainActivity extends Activity {

protected FrameLayout webViewPlaceholder;
protected WebView myWebView;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

initUI();

}

@SuppressWarnings("deprecation")
protected void initUI() {

webViewPlaceholder = ((FrameLayout)findViewById(R.id.webViewPlaceholder));


if (myWebView == null){
//Create It
myWebView = new WebView(this);
myWebView.setLayoutParams(new ViewGroup.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
WebSettings webSettings = myWebView.getSettings();
webSettings.setJavaScriptEnabled(true);
webSettings.setSupportZoom(true);
webSettings.setBuiltInZoomControls(true);
webSettings.setLoadsImagesAutomatically(true);
myWebView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);
myWebView.setScrollbarFadingEnabled(true);
myWebView.setWebViewClient(new WebViewClient());
myWebView.setWebChromeClient(new WebChromeClient());
myWebView.setInitialScale(1);
myWebView.loadUrl("http://www.theurl.com");

}

webViewPlaceholder.addView(myWebView);

}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}

@Override
public void onConfigurationChanged(Configuration newConfig){

if (myWebView != null) {

webViewPlaceholder.removeView(myWebView);

}

super.onConfigurationChanged(newConfig);

setContentView(R.layout.activity_main);

initUI();

}


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

// Save the state of the WebView
myWebView.saveState(outState);
}


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

// Restore the state of the WebView
myWebView.restoreState(savedInstanceState);
}
}

主要 Activity XML:

<LinearLayout 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"
android:orientation="horizontal" >

<FrameLayout android:id="@+id/webViewPlaceholder"
android:layout_width="fill_parent"
android:layout_height="fill_parent"/>

</LinearLayout>

最佳答案

尝试在 list 文件中为您的 Activity 定义添加方向,如下所示:

<activity android:screenOrientation="portrait"  ...>
</activity>

关于android - 防止 Chrome 在重新定位时重新加载页面?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13386848/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com