【问题标题】:Why childFragmentManager.getBackStackEntryCount() is always 0?为什么 childFragmentManager.getBackStackEntryCount() 总是 0?
【发布时间】:2021-04-14 01:50:40
【问题描述】:

如果添加了 childFragment,我会尝试在 childFragmentManager 上 popBackStack,但是当我检查 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()
        }

【问题讨论】:

  • 我猜你确实想使用getParentFragmentManager(),而不是getChildFragmentManager()
  • 你的意思是在for循环里面?你能告诉我如何使用它吗?谢谢!

标签: android kotlin android-fragments fragmentmanager child-fragment


【解决方案1】:

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

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

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

fragmentManager.beginTransaction()
        .replace(R.id.frame_layout, stepsFragment)
        .addToBackStack(null)
        .commit();

【讨论】:

  • 我将片段添加到后堆栈,但在另一个类中,请再次检查问题,
猜你喜欢
  • 2011-12-28
  • 2011-12-28
  • 1970-01-01
  • 1970-01-01
  • 2021-01-24
  • 1970-01-01
  • 1970-01-01
  • 2016-09-16
  • 2020-05-25
相关资源
最近更新 更多