【问题标题】:Get fragment from backstack从后台获取片段
【发布时间】:2015-08-21 11:21:33
【问题描述】:

几乎无法从 backstack 中获取片段,甚至开始考虑保持单例,这可能很糟糕。 像这样保存到后台堆栈,并且一直尝试通过标签获取它或其他东西给我错误。

Fragment fragment = UserProfileFragment.newInstance(null);
                        FragmentTransaction trans = getFragmentManager().beginTransaction();
                        trans.replace(FRAGMENT_PLACE_RESOURCES, fragment);
                        trans.addToBackStack("profile");
                        trans.commit();

它只是在这里返回 null,所以我不能使用这个片段。没有日志。

Fragment fragment2 = getFragmentManager().findFragmentByTag("profile");

【问题讨论】:

  • 请发布您遇到的错误(完整的堆栈跟踪和/或 logcat 转储)
  • 添加了代码,可能我添加的标签不正确?
  • 塞巴斯蒂安,感谢您的帮助。
  • 您是否在将片段添加到回溯后立即检查片段? (如果没有,请立即尝试查看是否已添加)您是否在调用 saveInstanceState 后无法提交事务的某个地方出现异常?

标签: android android-fragments fragment


【解决方案1】:

getFragmentManager().findFragmentByTag("tag")

仅在您添加了带有特定标签的片段时使用,例如

fragmentTransaction.add(R.id.order_container,mProfileFragment,"profile");

fragmentTransaction.replace(R.id.order_container,mProfileFragment,"sometag");

然后你就可以通过标签找到这个片段了。

在您的情况下,您正在将事务添加到 backstack,因此您将无法按标签找到该片段。您只需将事务添加到后台堆栈,这不是片段。而且您的片段也已从活动中删除并销毁,因此您必须通过弹出回栈而不是按标签查找该片段来恢复事务。 你必须打电话

getFragmentManager().popBackStack("profile");

将该片段返回到 Activity 并使其在屏幕上可见。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-01
    • 1970-01-01
    • 2013-02-04
    • 1970-01-01
    • 1970-01-01
    • 2019-03-12
    • 1970-01-01
    相关资源
    最近更新 更多