我有一个FragmentActivity
,其中Buttons
和三个Fragment
类。如果点击了按钮1,我想显示FragmentOne
并隐藏FragmentTwo
,FragmentThree
。如果点击Button2
,我想展示FragmentTwo
并隐藏FragmentOne
,FragmentThree
,反之亦然。我的代码没有用。
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;
}
}
答案 0 :(得分:1)
您需要commit
您的交易:
transaction.commit();
另请注意,show()
和hide()
仅适用于添加到容器中的片段(例如ie FrameLayout
),因此,如果您的片段直接以XML格式定义,那么您可能不会能够以你尝试的方式做到这一点。此外,如果您使用容器,只需在它们上定期setVisibility()
而不是在那里处理片段 - 效果将完全相同。
答案 1 :(得分:1)
这只是一个拼写错误,或者您使用相同的var名称来引用两个对象?
f2 = manager.findFragmentById(R.id.second);
f2 = manager.findFragmentById(R.id.third);
如果您想了解更多关于trasaction的信息,请查看我的博客here。