addtoBackStack在启动活动之前导致额外的空白项目

时间:2014-01-26 21:48:53

标签: android-fragments back-stack

我有一个活动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);
    }
}

1 个答案:

答案 0 :(得分:0)

我认为这是预期的行为。当我添加第一页时,活动实际上是一个带有framelayout的空白页面,因此添加backstack会将您带回到此页面。