FragmentTransaction替换只能工作一次

时间:2014-06-27 13:44:38

标签: android android-fragments replace fragment fragmenttransaction

我在一个页面上工作,我有三个按钮像tab一样工作,当点击其中一个时,行为应该是下面的FrameLayout(Fragment容器)应该用预期的一个替换片段。

enter image description here

在活动的 onCreate 我有这个方法,所以容器显示第一个片段,(这很好):

ProductDetailInformacoesFragment infoFragment = new ProductDetailInformacoesFragment();
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.replace(R.id.product_detail_fragment_container, infoFragment);

然后我有一个在不同的按钮侦听器上调用的switch语句,因此会显示正确的片段:

public void switchFragment(int fragmentPos)
{
    switch (fragmentPos){
        case 0:
            ProductDetailInformacoesFragment infoFragment = new ProductDetailInformacoesFragment();
            FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
            ft.replace(R.id.product_detail_fragment_container, infoFragment);
            ft.commit();
            break;

        case 1:
            ProductDetailCaracteristicasFragment caracteristicasFragment = new ProductDetailCaracteristicasFragment();
            FragmentTransaction ftt = getSupportFragmentManager().beginTransaction();
            ftt.replace(R.id.product_detail_fragment_container, caracteristicasFragment);
            ftt.commit();
            break;
        case 2:
            ProductDetailAvaliacoesFragment avaliacoesFragment = new ProductDetailAvaliacoesFragment();
            FragmentTransaction fttt = getSupportFragmentManager().beginTransaction();
            fttt.replace(R.id.product_detail_fragment_container, avaliacoesFragment);
            fttt.commit();
            break;
        default:
            break;
    }
}

XML:

            <FrameLayout
            android:id="@+id/product_detail_fragment_container"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_below="@+id/base_view"
            android:background="@android:color/white"/>

问题是当我点击其中一个标签时,片段容器变为空白(白色)并且未显示所需的片段,无论我点击哪一个(即使是那个已经显示)。 我做错了什么? - 我试过设置ft.addToBackStack(null)没有帮助。

1 个答案:

答案 0 :(得分:0)

。在实施之前,你应该控制你的frament是否为null并将其添加到容器中。如果您的片段是实例化的,您应该只显示它​​。如果单击一个按钮,则使用上面提到的技巧管理显示所需的片段,然后隐藏其他片段。 你应该使用android的ActionBar功能。并使用Tab代替您的按钮。 onTabSelected()onTabUnselected()分别管理Tab上的操作,如附加或分离片段。一切都在android开发者论坛中详细说明。这是网址http://developer.android.com/guide/topics/ui/actionbar.html,因此请转到&#34;添加导航标签&#34;完整的解释一个例子。

以下是使用AndroidSupport管理选项卡选择和取消选择的代码概述

public void onTabSelected(Tab tab, FragmentTransaction fT) {
    FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
    switch (tab.getPosition()) {
    case your_tab_position:
        if(your_fragment == null){
            your_fragment = new Your_fragment();
            ft.add(R.id.your_container, your_fragment, your_tag);
        }
        else{
            ft.show(your_fragment);
            }

        break;
.
.
.
}
}

public void onTabUnselected(Tab tab, FragmentTransaction fT) {
    FragmentTransaction ft = getSupportFragmentManager().beginTransaction();

    switch (tab.getPosition()) {
    case your_tab_position:
        if(your_fragment != null){
            ft.hide(your_fragment);
        }
        break;
.
.
.
}
}