2012-01-31 13 views
5

Fragmentsを拡張する別のクラスを呼び出すActionBarタブメニューを作成することができました。 問題は、方向を変更すると、メニュー項目を切り替えることは何もしません。 しかし、私はついにこの問題を理解しました。Android ICS + ActionBarタブ+オリエンテーションの変更

ここでの主な問題は、古いフラグメントであるとき、向きの変更、削除、これだけのユーザーの選択したタブ

上記未使用のタブのコピーが任意のアイデアが常にありますされていないのですか?私は何か基本的なものを欠いている?

はあなたに

答えて

15

をありがとう、私はようやく私のビューにフラグメントを追加しました私はft.addを持っていた私のカスタムActionBar.TabListenerクラスで定義されonTabSelected方法では、自分で解決策を見つけました。

方向が変更された場合、onTabUnselectedメソッドは呼び出されていないため、フラグメントはそこに残りました。

ft.addft.replaceに変更すると、古いフラグメントがすべて消去され、新しいフラグメントが正しく表示されます。このことができます

希望は

1

他の誰か、私はそれが活動のレクリエーション上のselectedIndexを保存する方が良いと思います。 このように、同じインデックスが選択され、選択されていないために問題が発生することはなく、ユーザーにとってもより良い方法です。

protected void onSaveInstanceState(Bundle outState) { 
     super.onSaveInstanceState(outState); 
     int i = getActionBar().getSelectedNavigationIndex(); 
     outState.putInt("selectedTabIndex", i);  
} 

    //And then restore 
    private void initActionBar(Bundle savedInstanceState) { 
     ActionBar ab = getActionBar(); 
     ab.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 
     ab.addTab(...); 
      ... 

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

は古いフラグメント(onTabUnselected(左から)呼び出されていない)のためのタブリスナーのコンストラクタチェックを持っており、それを取り外します。 ActionBarSherlockのために特別に作られたタブリスナーがここにあります:FragmentTabListener.java。サポートライブラリなしで使用するための同じコンストラクタコードは、APIデモのFragmentTabs.javaにもあります。