Android восстановление веб-просмотра во время изменения ориентации на вкладках вкладок - PullRequest
1 голос
/ 08 марта 2012

В моем приложении у меня есть вкладка с тремя вкладками.У всех трех вкладок есть веб-просмотр, и я загружаю разные 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);
    }

Теперь, когда я меняю ориентацию телефона, я вижу, что веб-страница не перезагружается, и это правильно.Но на всех трех вкладках показаны те же данные, что и содержимое веб-просмотра на первой вкладке.

Пожалуйста, помогите мне понять это поведение и правильный способ его реализации.

Исходный код для одногоактивность вкладки приведена ниже.У меня есть три вида деятельности, как это.Что я вижу, так это то, что при изменении ориентации на любой из этих вкладок все действия трех вкладок и родительские действия, которые устанавливают эти вкладки, уничтожаются.

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

}

1 Ответ

0 голосов
/ 08 марта 2012

если вы добавите этот код в тег активности в файле манифеста, как этот

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

и вы можете изменить свойство элементов управления ..

Надеюсь, это поможет тебе ...

...