3

この問題について教えてください。タブ付きのアプリケーションがあります。各タブには、フラグメントの独自のバックスタックが含まれています。ユーザーが任意のタブを押したときにバックスタックをクリアしようとすると、問題が発生します。onResume()スタックアクティビティが呼び出されたときに、スタックをクリアしようとしています。しかし、この解決策は次のエラーを引き起こします:

12-18 12:41:41.700: E/AndroidRuntime(4136): FATAL EXCEPTION: main
12-18 12:41:41.700: E/AndroidRuntime(4136): java.lang.RuntimeException: Unable to resume activity {cz.anywhere.fio_t/cz.anywhere.fio_t.fragments.stack.MarketStack}: java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState

バックスタックに使用するクラスです。

public class MarketStack extends TabFragmentActivity{

    final public static String MARKET_MAIN_FRAGMENT_TAG = "main_market_fragment";
    final public static String MARKET_SECURITIES_FRAGMENT_TAG = "market_securities_fragment";
    final public static String MARKET_DETAIL_FRAGMENT_TAG = "market_detail_fragment";

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

        Log.i("MarketStack", "onCreate");

        if(savedInstanceState == null){
            addFragmentToStack(new MarketFragment(), MARKET_MAIN_FRAGMENT_TAG);
        }

    }

    @Override
    protected void onResume() {
        super.onResume();

        Log.i("MarketStack", "onResume");

    }

}

そして親クラス。onResume()メソッドでエラーが発生しました。

public class TabFragmentActivity extends SherlockFragmentActivity { 

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_in_tab);

            Log.i("TabFragmentActivity", "onCreate");
        }

        public void addFragmentToStack(Fragment newFragment, String fragmentTag) {
            FragmentManager manager = getSupportFragmentManager();
            FragmentTransaction ft = manager.beginTransaction();
            ft.replace(R.id.content, newFragment, fragmentTag);
            ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
            ft.addToBackStack(null);

            ft.commit();
        }

        @Override
        public void onBackPressed() {

            Log.i("TabFragmentActivity", "onBackPressed");

            FragmentManager manager = getSupportFragmentManager();
            if (manager.getBackStackEntryCount() > 1) {
                super.onBackPressed();
            } else {            
                // Otherwise, ask user if he wants to leave :)
                //showExitDialog();
                super.onBackPressed();
            }
        }

        @Override
        protected void onResume() {
            super.onResume();

            FragmentManager fm = getSupportFragmentManager();

            for(int i = 0; i<fm.getBackStackEntryCount()-1; i++){
                fm.popBackStack();
            }
        }

アドバイスありがとうございます。

4

0 に答える 0