0

そのため、画面を回転すると、新しいレイアウト用にアクティビティが作成および破棄されるため、コンテンツが元の状態に戻ることを理解しています。

これは、WebView に表示している Web アプリがユーザーに一意の情報を表示するため、電話を横向きにするとデータが失われるため、私にとっては問題です。これで、オーバーライドする必要がある 2 つのメソッドはわかりましたが、まったく同じデータで正確なページを復活させるために onSaveInstanceState に何を入れることができるかは完全にはわかりません。URLを保存してそれを使用しようとしましたが、ページはランダムな機能を使用しているため、異なります.

これまでのところ、私が持っているのは次のとおりです。

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

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

これを達成する方法について何か考えはありますか?

4

3 に答える 3

2

マニフェストのエントリを次のように変更して、構成の変更中にアクティビティを再起動しないようにすると、おそらくより簡単になります。

    <activity android:name=".MyActivity"
        android:configChanges="orientation|keyboardHidden" />

WebViewのリファレンス ページから:

アクティビティの標準的な動作は、デバイスの向きやその他の構成が変更されたときに破棄され、再作成されることです。これにより、WebView が現在のページをリロードします。それが望ましくない場合は、方向と keyboardHidden の変更を処理するようにアクティビティを設定し、WebView をそのままにしておくことができます。必要に応じて自動的に向きを変えます。

更新

この回答によると、使用する必要があります

    <activity android:name=".MyActivity"
        android:configChanges="orientation|screenSize" />

ハニカム以上のバージョンのデバイスの代わりに。試してみてください:)

于 2012-08-24T13:18:20.677 に答える
1

私と一緒にこの作品を試してみてください

    if (savedInstanceState == null)
{
  web.loadUrl(webURL);
}

追加メソッド

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

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

リンク:Android-RotateでのWebViewのリロードの防止

于 2013-02-12T03:35:02.217 に答える
0

私が理解している限り、あなたの問題は Android クライアントの実装よりも Web アプリケーションにあります。URL を保存するだけでは不十分な場合は、これらの「ランダム データ」をホスト アプリケーションに送信する別の方法を見つける必要があります。おそらく、Cookie または JavaScript 変数を使用します。

于 2012-08-24T00:02:57.827 に答える