片段A调用片段B - B做一个popbackstack - 它在A中返回

时间:2017-09-06 07:48:11

标签: android android-fragments android-nested-fragment

我无法在调用片段B后找到片段A中返回的位置。

片段A调用片段测试如下:

 <button (mouseover)="showMesageValidation()" class="edm-button" type="submit" [disabled]="!f.valid">confirm</button>

在测试中,我点击一个按钮返回:

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

从那里我以为它回到了onAttach的片段A,onResume但是我看不到它在Fragment A中的返回位置?

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

2 个答案:

答案 0 :(得分:0)

PopBackStack()没有弹出片段,它会弹出片段事务。

因此,最后一个片段事务在被调用时会被反转。如果您从FragmentA移动到FragmentTest,那么它将用FragmentTest替换FragmentA并将该事务添加到后端堆栈(而不是片段)。如果你然后按下后退按钮,它会从后面的堆栈中弹出事务,这是&#34;用FragmentTest替换这个FragmentA&#34;。

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

编辑:使用此功能检查backstack是否存在且包含测试片段。

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

答案 1 :(得分:-1)

使用

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

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