【问题标题】:Android: Fragments act unexpected (suddenly transparent?)Android:片段行为出乎意料(突然透明?)
【发布时间】:2016-01-17 22:59:44
【问题描述】:

我的片段有问题。我使用这段代码在片段之间导航:

在“主要”片段之间(没有回栈,因为我希望用户在按下后退出(它有效)):

    FragmentManager fragmentManager = getFragmentManager();
    final FragmentTransaction ft = fragmentManager.beginTransaction();

    ft.setCustomAnimations(R.anim.slide_in_up_honeycomb, R.anim.slide_out_up_honeycomb);
    ft.replace(R.id.container, NewsFragment.newInstance(position + 1), NewsFragment.class.getSimpleName());
    ft.commit();

在“内部”片段之间(带回栈):

            FragmentTransaction ft = ((Activity) getActivity()).getFragmentManager().beginTransaction();
            Fragment nextFragment = LexikonDetailFragment
                    .newInstance(item);

            ft.setCustomAnimations(R.anim.slide_in_up_honeycomb, R.anim.slide_out_up_honeycomb);
            ft.replace(R.id.container, nextFragment);
            ft.addToBackStack(LexikonDetailFragment.class.getSimpleName());
            ft.commit();

但在以下情况下:

片段 A -> 片段 A1

片段 A1 -> 片段 B

按返回按钮(应该结束应用程序) -> 回到片段 A1

发生:

Image

看起来 A1 片段没有从后台堆栈中删除并停留在后台。我认为一种可能的解决方案是将所有片段设置为白色背景..但这不能解决问题,它只会隐藏它。那么有什么可能的解决方案呢?

【问题讨论】:

  • 你知道addToBackStack是什么意思吗?
  • 当然,但我认为当按下“返回”时片段会自动删除。
  • 我希望内部片段可以重复使用,这就是我使用 addtobackstack 的原因。但是一旦上部片段被改变,我不想再次恢复旧的内部片段。
  • 所以,你可以给 LexikonDetailFragment 添加背景。或者使用 ft.hide(R.id.container, oldFragment);添加之前 newFragment.addToBackStack 就像从一个 Activity 到另一个 Activity 的意图。如果第二个 Activity 具有透明主题,您可以看到前 Activity。
  • 嗯。我理解您的意图示例,但是如果我使用 ft.replace 函数,这应该不是问题。无论如何,我找到了解决方案。稍后会更新它:) 感谢您的帮助!

标签: android android-fragments transparent fragment-backstack


【解决方案1】:

好的,我找到了解决办法:

我必须通过命令手动删除内部碎片:

fm.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);

每次我的“外部”片段发生变化时,我都会调用这个命令。内部的被移除和tada......它就像一个魅力:)

【讨论】:

    猜你喜欢
    • 2015-06-25
    • 2019-11-26
    • 2015-03-01
    • 2013-05-02
    • 1970-01-01
    • 1970-01-01
    • 2019-08-12
    • 2020-09-26
    • 1970-01-01
    相关资源
    最近更新 更多