1

我有一个FragmentActivityButtons它和三个Fragment类。如果单击按钮 1,我想显示FragmentOne和隐藏FragmentTwo, FragmentThree。如果Button2被点击,我想显示FragmentTwo和隐藏FragmentOneFragmentThree反之亦然。我的代码不起作用。

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

}

在此处输入图像描述

4

2 回答 2

1

您需要进行commit交易:

transaction.commit();

另请注意,show()andhide()仅适用于添加到容器中的片段(例如 ie FrameLayout),因此如果您直接在 XML 中定义了片段,那么您可能无法按照您尝试的方式执行此操作。此外,如果您使用容器,只需setVisibility()对它们进行常规操作,而不是在那里处理片段 - 效果将完全相同。

于 2013-04-07T17:42:12.110 回答
1

这只是一个拼写错误,或者您使用相同的 var 名称来引用两个对象?

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

如果您想了解更多有关交易的信息,请查看我的博客,这里

于 2013-04-08T14:36:05.717 回答