2

こんにちは、私は 4 つのタブ (tab1、tab2、tab3、tab4 としましょう) を持つ Android APP を持っています。アクティビティ開始時のデフォルトのタブは tab1 です。他のタブ (tab2、3、または 4) に切り替えて画面の向きを変更すると、常にデフォルトのタブ (tab1) にリセットされます。

次のコードで試しました:

@Override
public void onConfigurationChanged(Configuration newConfig)
{
    super.onConfigurationChanged(newConfig);
    setContentView(R.layout.main);
    createView();
}

そして createView() の中に私は持っています:

private void createView()
{
... // Tabs are created before
tabHost.getTabWidget().setCurrentTab(CurrentTab);
}

CurentTabprivate int であり、デフォルトで 0 に設定されていますが、TabChange で設定されています。

public void onTabChanged(String tabId) {
    ... some code
    CurrentTab = tabHost.getCurrentTab();
}

私はここでスタックしています...この問題を解決する他の方法はありますか?

手短に: 画面の回転時にタブがデフォルトに変更されないようにしたい...

4

3 に答える 3

7

問題は、画面の回転などの構成変更時に、現在のアクティビティが破棄されて再作成されることです。タブ アクティビティの場合、これにはタブ アクティビティ自体と各タブのアクティビティが含まれます。

したがって、再作成されると、他の情報がないため、最初のタブが表示されるだけです。

これを修正するonRetainNonConfigurationInstance()には、タブ アクティビティをオーバーライドして、現在選択されているタブを返します。次に、タブ アクティビティの onCreate で呼び出しますgetLastNonConfigurationInstance()。これは、onRetainNonConfigurationInstance() で返されたオブジェクトを返します。オブジェクトが null の場合、方向の変更がないことがわかっているので、最初のタブを選択するだけです。null でない場合は、画面の回転があり、返された値を使用して、以前に選択されたタブを決定して設定できます。もう一度。

于 2011-04-15T11:44:45.240 に答える
2

したがって、アクティビティでonSaveInstanceState(Bundle)をオーバーライドして、これを実装する必要があります

画面回転アクティビティが再作成されるときのcoz

編集:

protected void onSaveInstanceState (Bundle outState){
    outState.putInt("LastTab", tabHost.getCurrentTab());
}


protected void onCreate (Bundle savedInstanceState){
  super.onCreate (savedInstanceState);
  //...tabs creation
  // u need to provide some code to check if "LastTab" exists in savedState
  tabHost.getTabWidget().setCurrentTab(savedInstanceState.getInt("LastTab"));
}
于 2011-04-15T11:35:58.483 に答える