2014-01-26 83 views
0

我有一個活動A.當我點擊一個按鈕,我開始一個活動B,其中包含一個framelayout,最終將包含一個片段。addtoBackStack在開始活動前導致額外的空白項目

在我的Activity B的onCreate過程中,我調用了一個將片段F1添加到片段(fragmentTransaction.add)的方法,將它添加到後端堆棧並顯示(它是一個列表視圖)。

當我將偵聽器從片段發回到活動以顯示項目已被點擊時,我重複上述段落,即添加片段F2,將其添加到後臺堆棧,讓它顯示。從F2我可能會顯示F3等。

這工作正常,對於我所有的項目它都很好,並且按回去(F3 - > F2,F2-> F1)。

然而,當我回來的第一片段F1和點擊返回,而不是將其回到第一個活動AI得到一個空白屏幕,然後再次按回我去開始活動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

我覺得這是預期的行爲。當我添加第一頁時,活動實際上是一個帶有框架佈局的空白頁面,因此添加backstack會將您帶回此頁面。