2

我正在处理每次用户单击列表中的产品时打开的产品详细信息页面。在页面中,我在顶部有一些产品图像,然后在图像下方有 3 个选项卡,在选项卡下方有一个片段容器,用于在选项卡之间切换。

问题:我第一次加载 Activity 我调用该showFragment(..)方法,并fragment_container用 InfoFragment 填充。当我然后单击另一个选项卡并再次调用该showFragment()方法时,容器变为空白。有趣的是,当我返回列表并再次单击相同的产品时,它会infoFragment像以前一样将其加载到容器中,但是当我单击选项卡时,它们会像黄油一样切换(没有问题)。任何人都知道出了什么问题?

这是我调用的方法,onCreate()它在开始时显示 infoFragment:

showFragment(R.id.product_detail_fragment_container, mInfoFragment, INFO_TAG, mCurrentFragmentTag, false);

当我单击不同的(第二个)选项卡时,我使用不同的参数调用相同的方法:

showFragment(R.id.product_detail_fragment_container, mCaraFragment, CARA_TAG, mCurrentFragmentTag, false);

showFragment(...)方法:

protected void showFragment(int resId, Fragment fragment, String tag, String lastTag, boolean addToBackStack) 
{
    FragmentManager fragmentManager = getSupportFragmentManager();
    FragmentTransaction transaction = fragmentManager.beginTransaction();

    if (lastTag != null) {
        Fragment lastFragment = fragmentManager.findFragmentByTag(lastTag);
        if (lastFragment != null) {
            transaction.setCustomAnimations(R.anim.fade_in, R.anim.fade_out);
            transaction.hide(lastFragment);
        }
    }

    if (fragment.isAdded()) {
        transaction.show(fragment);
    } else {
        transaction.add(resId, fragment, tag).setBreadCrumbShortTitle(tag);
    }

    if (addToBackStack) {
        transaction.addToBackStack(tag);
    }

    transaction.commit();
}

容器的 XML:

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

我试过调试代码,它transaction.add(resId, fragment, tag)在我切换选项卡时调用该方法,但容器变为空白。然后我关闭并再次启动详细信息页面,该方法被调用并显示内容...当我尝试使用另一种产品时,它不会显示片段,直到我返回并再次单击它

4

0 回答 0