0

如果添加了 childFragment,我正在尝试在 childFragmentManager 上弹出BackStack,但是当我检查 getChildFragmentManager.getBackStackEntryCount() 是否 > 0 时,它总是错误的。关于这个问题有什么建议吗?

@Override
public void onBackPressed() {
    if (getSupportFragmentManager().getBackStackEntryCount() < 2) {
        this.finishAffinity();
        android.os.Process.killProcess(android.os.Process.myPid());
        System.exit(1);
    } else {
        FragmentManager fm = getSupportFragmentManager();
        for (Fragment frag : fm.getFragments()) {
            FragmentManager childFm = frag.getChildFragmentManager();
            Log.i("RAZZZVI", "Number " + childFm.getBackStackEntryCount());
            if (childFm.getBackStackEntryCount() > 0) {
                childFm.popBackStackImmediate();
                return;

            } else {
                getSupportFragmentManager().popBackStackImmediate();
            }
        }
    }
}

这就是我添加片段的方式

layout_chart1.setOnClickListener {
            child_fragment_container.visibility = View.VISIBLE
            val transaction = childFragmentManager.beginTransaction()
            transaction.addToBackStack(null)
                    .setCustomAnimations(R.anim.pull_in_right, R.anim.push_out_right)
                    .add(R.id.child_fragment_container, PieChartDetails(chartsViewModel), "STATUS_DETAILS")
                    .commit()
        }

        layout_chart2.setOnClickListener {
            child_fragment_container.visibility = View.VISIBLE
            val transaction = childFragmentManager.beginTransaction()
            transaction.addToBackStack(null)
                    .setCustomAnimations(R.anim.pull_in_right, R.anim.push_out_right)
                    .add(R.id.child_fragment_container, BarChartDetails(chartsViewModel))
                    .commit()
        }
4

1 回答 1

1

getBackStackEntryCount()为 0,因为您还没有将任何 Fragment 事务添加到 FragmentManager 的后台堆栈。

请注意,每个 FragmentManager 都有自己的 backstack(因此 Fragment 的子 FragmentManager 堆栈将不同于包含 Activity 的片段 backstack),并且它也不同于应用程序的 Activity 返回堆栈。

如果您像这样将交易添加到后台堆栈,它将返回 1:

fragmentManager.beginTransaction()
        .replace(R.id.frame_layout, stepsFragment)
        .addToBackStack(null)
        .commit();
于 2021-01-08T10:55:47.590 回答