1

我有一個FragmentActivity,其中Buttons和三個Fragment類。如果按鈕1被點擊,我想顯示FragmentOne並隱藏FragmentTwoFragmentThree。如果點擊Button2,我想顯示FragmentTwo並隱藏FragmentOneFragmentThree,反之亦然。我的代碼沒有工作。在Android中隱藏/顯示片段

private void fManager() { 

    FragmentManager manager = getSupportFragmentManager(); 

    f1 = manager.findFragmentById(R.id.first); 
    f2 = manager.findFragmentById(R.id.second); 
    f2 = manager.findFragmentById(R.id.third); 
} 

@Override 
public void onClick(View v) { 
    switch (v.getId()) { 
    case R.id.button1: 
     if (b1.isPressed()) { 
      FragmentTransaction transaction = getSupportFragmentManager() 
        .beginTransaction(); 
      transaction.hide(f2); 
      transaction.hide(f3); 
      transaction.show(f1); 
          transaction.commit(); 
     } 
     break; 
    case R.id.button2: 
     if (b2.isPressed()) { 
      FragmentTransaction transaction = getSupportFragmentManager() 
        .beginTransaction(); 
      transaction.hide(f1); 
      transaction.hide(f3); 
      transaction.show(f2); 
          transaction.commit(); 
     } 
     break; 
    case R.id.button3: 
     if (b3.isPressed()) { 
      FragmentTransaction transaction = getSupportFragmentManager() 
        .beginTransaction(); 
      transaction.hide(f1); 
      transaction.hide(f2); 
      transaction.show(f3); 
         transaction.commit(); 
     } 
     break; 
    } 

} 

enter image description here

回答

1

您需要commit您的交易:

transaction.commit(); 

還要注意的是show()hide()將只能用於添加到容器片段(如IE FrameLayout),所以如果你有您的片段直接以XML定義,那麼您可能無法按照您的嘗試方式進行操作。此外,如果您使用容器,只需對其執行常規setVisibility()而不是在那裏處理碎片 - 效果將完全相同。

+0

經理或交易?我試過'transaction.commit();'它沒有工作 – DroidLearner 2013-04-07 17:45:51

+0

應該是事務。另請參閱編輯 – 2013-04-07 18:19:09

+0

請檢查我的代碼http://pastebin.com/STkUKuSi並讓我知道在哪裏寫setVisibility(); – DroidLearner 2013-04-07 18:39:28

1

這只是一個錯字錯誤,或者您使用相同的var名稱引用兩個對象?

f2 = manager.findFragmentById(R.id.second); 
f2 = manager.findFragmentById(R.id.third); 

如果你想擁有約trasaction一些更多的信息給我的博客上,here看看。