0

アプリはデータをダウンロードしてlistFragmentobjにフィードする必要がありますが、これはActionBarドロップダウンリストの最初のアイテム「Today」に対してのみ実行されます。2番目のアイテムを選択すると、「すぐに」アプリがエラーでクラッシュします。

03-21 14:53:05.272: E/AndroidRuntime(5289): FATAL EXCEPTION: main
03-21 14:53:05.272: E/AndroidRuntime(5289): java.lang.IllegalStateException: commit already called

複数回呼び出すとそのエラーが発生することを理解してcommit()いますが、コミットデータがないと画面に表示されません。私を助けてください、私はそれを解決する方法がわかりません。どんな助けでもありがたいです。

パブリッククラスMainActivityはActivity{を拡張します

    ParkFragment mFragment;
    ParkFragment mFragment2;
    FragmentTransaction transaction = getFragmentManager().beginTransaction();

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

        final String[] actions = new String[] {"Today","Soon"};
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(getBaseContext(), android.R.layout.simple_spinner_dropdown_item, actions);

        ActionBar actionBar = getActionBar();
        actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);

        ActionBar.OnNavigationListener navigationListener = new OnNavigationListener() {

            @Override
            public boolean onNavigationItemSelected(int itemPosition, long itemId) {
                if (actions[itemPosition] == "Today"){
                    if (mFragment2 != null){transaction.detach(mFragment2);}
                    if (mFragment == null){
                        mFragment = new ParkFragment("url1",MainActivity.this);
                        transaction.add(android.R.id.content, mFragment);
                        transaction.commit();
                    }else{
                        transaction.attach(mFragment);
                        transaction.commit();
                    }
                   }
                   if (actions[itemPosition]== "Soon"){
                       if (mFragment != null){transaction.detach(mFragment);
                       System.out.println("Detached");}
                    if (mFragment2 == null){
                        mFragment2 = new ParkFragment("url2",MainActivity.this);
                        transaction.add(android.R.id.content, mFragment2);
                        transaction.commit();
                    }else{
                        transaction.attach(mFragment2);
                        transaction.commit();
                    }       
                }
                return true;
            }
        };

        actionBar.setListNavigationCallbacks(adapter, navigationListener);

        }
4

1 に答える 1

3

FragmentTransactionメンバー変数ではなく、ローカル変数を作成します。

PSUEDO:

if (...) {
   FragmentTransaction transaction = getFragmentManager().beginTransaction(); 
   //add.. do stuff
   transaction.commit();
} else {
   FragmentTransaction transaction = getFragmentManager().beginTransaction(); 
   //add.. do stuff
   transaction.commit();
}
于 2013-03-21T15:12:35.970 に答える