在我的应用程序中,我有一个包含三个选项卡的tabhost。所有这三个选项卡都有一个webview,我加载了不同的URL。
我想添加对方向更改的支持,以便每次更改配置时都不会重新加载网页。所以我将以下附加代码添加到所有三个选项卡活动
super.onCreate(savedInstanceState);
setContentView(R.layout.review_web);
webDetailInfo = (WebView) findViewById(R.id.webReview);
if (savedInstanceState != null)
webDetailInfo.restoreState(savedInstanceState);
else{.....
@Override
protected void onSaveInstanceState(Bundle outState) {
Log.i("onsave", "detailweb");
webDetailInfo.saveState(outState);
}
现在,当我改变手机的方向时,我看到的是,网页没有重新加载,这是正确的。但是所有三个选项卡都显示相同的数据,即第一个选项卡中的webview内容。
请帮助我理解这种行为以及实施它的正确方法。
下面给出了其中一个标签活动的源代码。我有三个这样的活动。 我所看到的是,当在任何这些选项卡中方向发生变化时,所有的thre选项卡活动和设置这些选项卡的父活动都会被杀死。
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.DialogInterface.OnCancelListener;
import android.graphics.Bitmap;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;
import android.view.Window;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Toast;
import com.idg.project.R;
import com.idg.project.entity.ScannedProduct;
import com.idg.project.services.ScannedProductDataAccessManager;
import com.idg.project.utils.ReviewWebClient;
public class ReviewWebActivity extends BaseActivity {
WebView webReview;
String reviewUrl;
ProgressDialog progreesDialogue;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
final BaseActivity MyActivity = ReviewWebActivity.this;
setContentView(R.layout.review_web);
if (savedInstanceState != null)
((WebView)findViewById(R.id.webReview)).restoreState(savedInstanceState);
else{
ScannedProduct product = getReviewUrl();
reviewUrl = product.getReviewLink();
if (reviewUrl.equals("")) {
String err = product.getErrorCode();
if (err.equals(""))
err = "No Data Available for this product";
Toast.makeText(getApplicationContext(),
"No Data Available for this product", 1).show();
if (progreesDialogue != null && progreesDialogue.isShowing() ) {
progreesDialogue.dismiss();
}
return;
} else {
webReview = (WebView) findViewById(R.id.webReview);
webReview.setWebViewClient(new WebViewClient() {
webReview.getSettings().setJavaScriptEnabled(true);
if (isOnline()) {
webReview.loadUrl(reviewUrl);
} else {
showAlertMessge("Network Connection Error "
+ "\nCheck your network connection");
}
}}
}
}
@Override
protected void onSaveInstanceState(Bundle outState) {
Log.i("onsave", "reviewweb");
((WebView)findViewById(R.id.webReview)).saveState(outState);
}
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
Log.i("ondestroy", "progressdialog null");
progreesDialogue = null;
}
}
答案 0 :(得分:0)
如果您将此代码添加到清单文件中的活动代码中,就像这样
<activity android:name=".Slime"
android:label="@string/app_name"
android:configChanges="keyboardHidden|orientation"
android:screenOrientation="landscape">
如果没有这个,则会调用create方法的每个方向更改,因此您的webView正在重新加载,但是如果添加
android:configChanges="keyboardHidden|orientation"
你的活动中的这一行,以便在那个活动中当方向改变时,控制不会继续onCreate()而不是那个控件将继续这个方法
// Called on rotation.
// Does not call onDestroy anymore due to android:configChanges="keyboardHidden|orientation" in manifest
@Override
public void onConfigurationChanged(Configuration newConfig) {
// TODO Auto-generated method stub
super.onConfigurationChanged(newConfig);
}
你可以改变控件的属性..
我希望这会让你感到高兴......