2010-12-10 9 views
1

私はタブ付きのAndroidアプリを持っていると私はこれらの(確かに奇妙な)の手順に従う時はいつでも私はTabOneのコンテンツを失っています:へのAndroidアプリの問題をタブを切り替えるときの状態を失い、オリエンテーション

  1. 変更を別のタブ。
  2. 向きを横向きに切り替えます。
  3. 向きをポートレートに戻します。
  4. TabOneに戻ります。

アンドロイドアプリ概要:私たちはTabOne、TabTwo、およびTabThreeそれらを呼び出すよ、google's TabLayout tutorialを使用して構築された3つのタブでかなり最低限のAndroidアプリを持っています。 TabOneだけがコンテンツを持っています:単純なEditTextビューと、を使用すると、TabOne本体にテキストを追加できます。これは、ArrayAdapterのカスタムを使用して調整されていますが、これは奇妙な動作と関係している可能性があります。

TabOneのままで向きを変えても、これは発生しません。これは私のTabOneActivityクラスの私のデータリストを保存するためにOnSaveInstanceState()OnRestoreInstanceState()を実装しているからです。

+0

私はそれが奇妙ではないと思います。 Androidは、リソースが少ないなどの理由でメモリを解放する必要があると考えられる場合、このようにアクティビティを管理できます。アクティビティがフォアグラウンドのアクティビティでない場合(タブコンテンツとしてアクティビティを使用していると仮定します)、Androidはそれを破棄して後で再び復元できます。向きの変更にも同じです。あなたの状態を保存する必要がある場合は、私の推奨はOnSaveInstanceStateとOnRestoreInstanceStateを実装することです。 –

+0

イエス様に感謝しますが、私は問題の活動にこれらの方法を両方持っています。主な活動にも保存すべき追加の状態がありますか? – plowman

+2

タブ内のアクティビティからタブ内のビューに切り替えることを検討してください。これは、この種のものをかなり簡単にするためです。たとえば、保存するコンテキストは1つだけで、タブごとに1つではなく、ホスティングアクティビティで1つです。 – CommonsWare

答えて

1

また、アクティビティの状態をonCreateと同様に復元する必要があります。また、OnRestoreInstanceStateに復元する必要があります。

このテクニックは、一時的なデータのためのものであり、長期間のデータの保存のためのものではありません。そのためには、データをSharedPreferencesのに保存してから、onResumeのデータを取得する必要があります。

4

同じ問題がありました。私が見つけた解決策は、TabLayout onCreateの[Dummy]タブとアクティビティを作成し、次にそのタブレイアウトアクティビティのonResumeで[Dummy]タブを非表示にして2番目のタブはプログラムによって実行されます。いいですが、第2タブの保存状態(つまり第1表示タブ)として機能します。

@Override 

protected void onResume() { 

    super.onResume(); 

    if (getTabHost() != null && getTabHost().getTabWidget()!= null) { 

     getTabHost().getTabWidget().getChildAt(0).setVisibility(View.GONE); 

     if (getTabHost().getCurrentTab() == 0) { 

      getTabHost().setCurrentTab(1); 

     } 

    } 

} 
関連する問題