Android 片段A调用片段B-B执行popbackstack-它在A中返回到哪里

Android 片段A调用片段B-B执行popbackstack-它在A中返回到哪里,android,android-fragments,android-nested-fragment,Android,Android Fragments,Android Nested Fragment,在调用片段B之后,我找不到它在片段A中返回的位置 片段A调用片段测试,如下所示: btn.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { FragmentTransaction ft = getFragmentManager().beginTransaction(); Test test = new Test();

在调用片段B之后,我找不到它在片段A中返回的位置

片段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();
        }
    });
}
从那以后,我以为它会返回到onAttach中的片段A,onResume,但我看不到它会在片段A中返回到哪里

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

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

在类片段的onResume()方法中。如果控件返回片段A,则该行将显示在logcat中。

PopBackStack()不会弹出片段,而是弹出片段事务

因此,最后一个片段事务在被调用时被反转。如果您从FragmentA移动到FragmentTest,那么它将用FragmentTest替换FragmentA,并将该事务添加到后堆栈(而不是片段)。如果然后点击后退按钮,它会将事务从后堆栈中弹出,即“用FragmentTest替换此FragmentA”

此指令反转上一个事务,并将其从执行的事务堆栈中删除。所以不会调用onAttach,因为您正在替换片段,所以将调用oncreateView

编辑:使用此功能检查backbackback是否存在,是否有测试片段

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();
        }
    }

我处于调试器模式,onResume中有一个断点。它不会返回到onResume。使用popBackStack(“测试”)而不是popBackStack immediate()popBackStack(“测试”,0)效果不会更好。我改为addToBackStack(null)和一个没有标记的popbackstack。我添加了分离和暂停。我看到frag测试同时通过了这两个测试,但frag A中没有重新激活的迹象。我以为它是用来维护一个活动碎片堆栈的!那么,我如何终止片段测试并恢复A。我更喜欢使用UI后退按钮。我无法理解这个问题。当您调用popbackstack()时片段测试将被终止,创建视图上的片段A将在其他生命周期后被调用。因此,显然,简历上的片段A将被调用。如果您认为我的解释有帮助,请投票并接受答案。当您说:“它将事务从后台堆栈中弹出,即”用片段测试替换此片段A我倒回去:我的理解是正确的。popbackstack的效果实际上是回到frag A屏幕上。这就是我解释的。只要正确阅读句子并在投票前理解即可。
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();
        }
    }