0

應用程序應該下載數據並將其提供到listFragment obj中,但它僅在ActionBar下拉列表中爲第一個項目「Today」執行操作。當我選擇第二項「很快」的應用程序崩潰時出錯。實現ActionBar導航列表+ ListFragment

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擴展活動{

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); 

     } 

回答

3

讓你FragmentTransaction一個局部變量,而不是一個成員變量。

僞:

if (...) { 
    FragmentTransaction transaction = getFragmentManager().beginTransaction(); 
    //add.. do stuff 
    transaction.commit(); 
} else { 
    FragmentTransaction transaction = getFragmentManager().beginTransaction(); 
    //add.. do stuff 
    transaction.commit(); 
} 
+0

謝謝,它的工作原理! 但我有一個問題,不是黑客? 我以爲FragmentTransaction obj應該只定義一次 – 2013-03-21 15:30:00

+1

你爲什麼這麼想?一旦你提交了一些操作,你有義務打開一個新的'FragmentTransaction'來執行和提交操作。如果它幫助你,請不要忘記接受答案。謝謝:) – DroidBender 2013-03-21 15:35:59

+0

當然,再次感謝你! :) – 2013-03-21 15:38:07