2014-03-03 77 views
0

我環顧四周,但找不到真正的解決方案來解決我的特定問題。所以我有一個導航主要活動,其中包含一個導航抽屜和我的內容的框架佈局。在片段上強制返回按鈕

在我的導航抽屜裏有三個按鈕,每個按鈕都用特定的片段填充框架佈局。其中一個片段充當「主視圖」,單擊片段中的項目然後打開另一個片段,即「詳細視圖」。

我遇到的問題是這樣的:如果我在詳細信息視圖片段中,並且我點擊導航抽屜中的另一個按鈕以轉到另一個片段,然後單擊導航抽屜按鈕以返回到我的詳細信息查看然後它很好,我到那裏好。當我點擊後退按鈕時,它將我帶回到前一個片段而不是主視圖片段。有什麼方法可以解決這個問題嗎?

下面是如何我不同的片段之間在我的資產淨值抽屜移動片段:

private void selectItem(int position) 
{ 
    FragmentManager fragmentManager = getFragmentManager(); 
    Fragment fragment = null; 
    Bundle args = new Bundle(); 

    switch (position) 
    { 
    case 0: 
     fragment = new ReportIt(); 
     fragment.setArguments(args); 
     break; 

    case 1: 
     Fragment f = fragmentManager.findFragmentByTag("article_view"); 

     if (f == null) 
     { 
      fragment = new ReadIt(); 
      fragment.setArguments(args); 
     } 
     else 
     { 
      fragment = f; 
     } 
     break; 

    case 2: 
     fragment = new FindIt(); 
     fragment.setArguments(args); 
     break; 

    default: 
     fragment = new ReportIt(); 
     fragment.setArguments(args); 
     break; 
    } 

    fragmentManager.beginTransaction() 
      .replace(R.id.content_frame, fragment).addToBackStack(null) 
      .commit(); 

    mDrawerList.setItemChecked(position, true); 
    setTitle(mNavTitles[position]); 
    mDrawerLayout.closeDrawer(mDrawerList); 
} 

我的母版視圖片段傳遞控制的細節片段:

FragmentManager fragmentManager = getFragmentManager(); 
      Fragment fragment = new ReadItDetail(); 

      Bundle args = new Bundle(); 
      args.putString("ArticleId", pr.GetId()); 
      fragment.setArguments(args); 

      fragmentManager.beginTransaction().addToBackStack(null) 
        .replace(R.id.content_frame, fragment, "article_view") 
        .commit(); 

enter image description here

因此,從圖中可以看到,所有3個導航抽屜按鈕都是我主要活動的一部分。在我的主要活動中還有一個使用所示片段的框架佈局。導航抽屜按鈕框外的所有框都是碎片。主人和細節是我遇到的問題。當我移動到其他片段,然後返回到我的細節片段時,點擊後退按鈕,我希望它在100%的時間內回到主片段,而不是回到我可能已經在其他片段上的任何其他片段先前。

+0

我很困惑你的應用程序的結構。主片段與其他片段的關係在哪裏?這些是一個一個加載嗎?如果是這樣,你想回到哪一個?聽起來像這只是一個背後的問題。 – Rarw

+0

我已更新我的信息以澄清。 – DeveryDay

回答

0

要控制什麼Fragment你回到你只需要控制在棧中的條目。 FragmentManager會讓你pop the backstack,所以你可以重置一旦你導航到細節片段後面。在SO - here's onehere's amonther有一些關於此的帖子提供了更多的細節。

與此相關的一個問題是,通過覆蓋背堆棧的自然流動,可能會導致創建不會從應用程序邏輯上干擾的導航。但是你比你的系統更瞭解你的結構。如果總是從細節走向主人是有道理的,那就去做吧。