android在tabhost选项卡中更改方向期间恢复webview

android在tabhost选项卡中更改方向期间恢复webview,android,webview,android-tabhost,restore,Android,Webview,Android Tabhost,Restore,在我的应用程序中,我有一个带有三个选项卡的tabhost。这三个选项卡都有一个webview,我加载不同的URL 我想添加对方向更改的支持,以便在每次更改配置时不会重新加载网页。因此,我将以下附加代码添加到所有三个选项卡活动中 super.onCreate(savedInstanceState); setContentView(R.layout.review_web); webDetailInfo = (WebView) findViewById(R.id.webReview);

在我的应用程序中,我有一个带有三个选项卡的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的内容

请帮助我理解这种行为以及正确的实施方式

下面给出了其中一个选项卡活动的源代码。我有三个这样的活动。 我看到的是,当在这些选项卡中的任何一个中方向发生变化时,所有的选项卡活动和设置这些选项卡的父活动都会被终止

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;
    }

}

如果您在清单文件中的活动标记中添加此代码,如下所示

<activity android:name=".Slime"
              android:label="@string/app_name"
              android:configChanges="keyboardHidden|orientation"
              android:screenOrientation="landscape"> 
这一行在您的活动中,以便在该活动中,当方向在当时更改时,控件将不会在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);
}
您可以更改控件的属性


我希望这将帮助您……

谢谢您的回复。但我的问题是,即使我像您所说的那样处理配置更改,savedinstance并没有为每个选项卡获取正确的内容,而是获取相同的数据。@preetha我认为webView.saveState(Bundle)此方法保存onSaveInstanceState(Bundle)中使用的此webView的状态。请注意,此方法不再存储此WebView的显示数据。我还认为,当您更改手机的方向时,它只会保存特定选项卡的网络视图,但我不确定这一点……我认为您应该尝试一次android:configChanges=“keyboardHidden | orientation”,因为这样您就不需要存储saveState了……谢谢。我无法设置此标志,因为纵向视图和横向视图的布局不同。如果我们设置这个标志,当方向改变时,布局不会改变。如果不需要这样做,则此解决方案将被删除。
// 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);
}