在Android中隐藏/显示片段

时间:2013-04-07 17:40:22

标签: android android-fragments android-button android-fragmentactivity

我有一个FragmentActivity,其中Buttons和三个Fragment类。如果点击了按钮1,我想显示FragmentOne并隐藏FragmentTwoFragmentThree。如果点击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;
    }

}

enter image description here

2 个答案:

答案 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