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看看。