我有一个活动A.当我点击一个按钮时,我启动一个活动B,其中包含一个最终将包含一个片段的framelayout。
在我的Activity B的onCreate期间,我调用一个方法将片段F1添加到片段(fragmentTransaction.add),将其添加到后栈并显示(它是列表视图)。
当我将我的监听器从片段发回到活动以显示已单击的项目时,我重复上面的段落,即添加片段F2,将其添加到backstack,让它显示。从F2我可能会显示F3等
这个工作正常,我的所有物品都很好,按下后退(F3 - > F2,F2-> F1)。
然而,当我回到第一个片段F1然后点击回来,而不是回到第一个活动A时,我得到一个空白屏幕,然后再次按回来,我会进入开始活动A.
出了什么问题?
如果它更清楚,这是代码:
private void addFragment(@Nonnull final String fragmentTag,
final long parentId) {
GuideListFragment guideListFragment;
FragmentTransaction fragmentTransaction;
guideListFragment = new GuideListFragment();
Bundle bundle = new Bundle();
bundle.putString("fragmentTag", fragmentTag);
guideListFragment.setArguments(bundle);
if (fragmentTag.equals(GUIDE_FRAGMENT)) {
guideItems = dataManager.getAllGuides();
guideAdapter = new GuideAdapter<Guide>(this, guideItems);
} else if (fragmentTag.equals(TOPIC_FRAGMENT)) {
topicItems = dataManager.getAllTopicsForGuide(parentId);
guideAdapter = new GuideAdapter<Topic>(this, topicItems);
} else if (fragmentTag.equals(SUBTOPIC_FRAGMENT)) {
subTopicItems = dataManager.getAllSubTopicsForTopic(parentId);
guideAdapter = new GuideAdapter<SubTopic>(this, subTopicItems);
}
guideListFragment.setListAdapter(guideAdapter);
fragmentTransaction = fragmentManager.beginTransaction();
guideListFragment.setListAdapter(guideAdapter);
fragmentTransaction.add(R.id.guidelist_container, guideListFragment,
fragmentTag);
fragmentTransaction.addToBackStack(fragmentTag);
fragmentTransaction.commit();
}
这里是我的列表片段的回调,它基本上增加了下一个级别:
public void onGuideSelected(long id, @Nonnull final String fragmentTag) {
if (fragmentTag.equals(GUIDE_FRAGMENT)) {
addFragment(TOPIC_FRAGMENT, id);
} else if (fragmentTag.equals(TOPIC_FRAGMENT)) {
addFragment(SUBTOPIC_FRAGMENT, id);
}
}
答案 0 :(得分:0)
我认为这是预期的行为。当我添加第一页时,活动实际上是一个带有framelayout的空白页面,因此添加backstack会将您带回到此页面。