我正在处理每次用户单击列表中的产品时打开的产品详细信息页面。在页面中,我在顶部有一些产品图像,然后在图像下方有 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)
在我切换选项卡时调用该方法,但容器变为空白。然后我关闭并再次启动详细信息页面,该方法被调用并显示内容...当我尝试使用另一种产品时,它不会显示片段,直到我返回并再次单击它