2017-09-06 43 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

相关问题