2017-09-06 41 views
-1

我不能返回」找到它以片段B.呼叫後返回片段A如下片段A調用B片段 - B做了popbackstack - 在它的一個

片段A調用片段測試:

btn.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
       FragmentTransaction ft = getFragmentManager().beginTransaction(); 
Test test = new Test(); 
       ft.replace(R.id.container, test); 
       ft.addToBackStack("test"); 
       ft.commit(); 
      } 
     }); 

在測試我點擊一個按鈕,返回:

@Override 
public void onActivityCreated(Bundle savedInstanceState) { 
    super.onActivityCreated(savedInstanceState); 

    Button btn = (Button) getActivity().findViewById(R.id.back); 
    btn.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      getActivity().getFragmentManager().popBackStackImmediate(); 
     } 
    }); 
} 

從那裏,我認爲這是回片段A在onAttach,但的onResume我看不出它是在返回片段一個?

@Override 
    public void onResume() { 
     super.onResume(); 
    } 

    @Override 
    public void onAttach(Context context) { 
     super.onAttach(context); 
    } 

回答

-1
使用

Log.d("Fragment", "Fragment A") 

在的onResume()片段的方法的類。如果控件返回到Fragment A,那麼這行將以logcat顯示。

+0

我在調試器模式下在onResume中有一個斷點。它不會回到onResume。 – narb

+0

使用popBackStack(「測試」)而不是popBackStackImmediate() –

+0

popbackstack(「test」,0)不能更好地工作。我改爲addToBackStack(null)和一個沒有標籤的popbackstack。我添加了一個分離和一個暫停。我看到碎片測試都經歷了兩次,但沒有在A片中重新激活的跡象。 – narb

0

PopBackStack()不彈出一個片段,它彈出一個片段事務。

因此,最後一個片段事務在被調用時被逆轉。如果你從FragmentA移動到FragmentTest,那麼它會用FragmentTest代替FragmentA,並將該事務添加到後端堆棧(而不是片段)。如果你點擊後退按鈕,它會將事務從後臺堆棧中彈出,這是「用FragmentTest替換這個FragmentA」。

該指令反轉上一個事務,並將其從執行的事務堆棧中移除。所以onAttach不會被調用,因爲你正在替換片段oncreateView將被調用。

編輯:使用此功能來檢查後臺存在並且有您的測試片段。

if (getSupportFragmentManager().getBackStackEntryCount() > 0 && getSupportFragmentManager().findFragmentById(R.id.your_container)!=null) { 
    Fragment fragment= getSupportFragmentManager().findFragmentById(R.id.your_container); 
     if(fragment.getClass().getSimpleName().equalsIgnoreCase(FragmentTest.class.getSimpleName())){ 
      getSupportFragmentManager().popBackStackImmediate(); 
     } 
    } 
+0

我認爲它被用來維護活動碎片堆棧!那麼,我該如何終止片段測試並繼續A.我寧願使用UI後退按鈕。 – narb

+0

我明白了這個問題。當你調用popbackstack()時,片段測試將被終止,並且創建視圖上的片段A會在其他生命週期之後被調用。所以顯然,resume中的片段A將被調用。如果你發現我的解釋有用,投票並接受答案。 – Anonymous

+0

當你說:「它從後面的堆棧彈出交易,這是」用FragmentTest替換這個FragmentA「,我實際上不同意 – narb

相關問題