3

私のアプリケーションには複数のタブがあります。縦向きから横向き、または横向きから縦向きの画面に変更するたびに、選択したタブが異なっていても、最初のタブに変わります。どうすればこの問題を解決できますか。

4

3 に答える 3

2

デフォルトでは、デバイスを回転させると、アクティビティが破棄されて再作成されます。選択したタブの状態を保存し、新しいアクティビティが起動されたときに復元する必要があります。

@Override
protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    // onCreate implementation goes here

    if(savedInstanceState != null) {
        int selectedTabIndex = savedInstanceState.getInt("selectedTabIndex");
        getActionBar().setSelectedNavigationItem(selectedTabIndex);
    }
}

@Override
protected void onSaveInstanceState(Bundle outState) {

    super.onSaveInstanceState(outState);
    outState.putInt("selectedTabIndex", getActionBar().getSelectedNavigationIndex());
}
于 2013-01-30T08:17:21.327 に答える
1

この問題を解決するには、onRetainNonConfigurationInstance() を使用できます。

public void onCreate(Bundle savedInstanceState)
{
   ....
   lastTab = (Integer) getLastNonConfigurationInstance();
   .....
   if(lastTab != null)
   {
      tabs.setCurrentTab(lastTab);
   }
}

public Object onRetainNonConfigurationInstance() 
{
   return tabs.getCurrentTab();
}
于 2013-02-20T05:16:29.507 に答える
0

向きを変更すると、アクティビティがリロードされます。そのため、1 つ目のタブを指定します。マニフェスト ファイル android:configChanges="keyboardHidden|orientation" で使用します。正常に動作しない場合は、@Override public void onSaveInstanceState(Bundle savedInstanceState) {} を使用します。

于 2013-01-30T08:07:58.103 に答える