【问题标题】:Weird android fragment issue using back stack使用回栈的奇怪的 android 片段问题
【发布时间】:2013-03-12 14:32:50
【问题描述】:

我对 Android 兼容性包片段有以下问题。 片段的层次结构如下:

A(登录)-> B(仪表板)-> C(详细信息)

登录片段添加功能:

private void addFragment(Fragment f) {
    FragmentTransaction ft = mFragmentManager.beginTransaction();
    ft.replace(R.id.main_content, f);
    ft.commit();
}

成功登录后仪表板以相同方式添加,无需将事务添加到后台。 C片段添加如下:

FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.replace(R.id.main_content, f, id);
ft.addToBackStack(null);
ft.commit();

所以基本上在详细信息屏幕上我有注销按钮,它应该让我登录 A 并从 backstack 中删除所有片段。根据android开发者文档:

然而,如果您在移除片段时确实调用了 addToBackStack(),那么片段将停止并在用户返回时恢复。

但这不是我的问题。在 C 片段中按下注销时:

getFragmentManager.popBackStackImmediate(); 
FragmentTransaction ft = mFragmentManager.beginTransaction();
ft.replace(R.id.main_content, new LoginFragment());
ft.commit();

B片段的onActivityCreated(),onStart()也被调用(而不是文档中写的onResume),使我的代码崩溃,因为在这个片段中我开始了一些线程操作,并且在添加登录片段后我得到了片段B的IllegalStateException没有附加到活动(当线程操作结束时,它会更新片段 UI)有谁知道替换的真正工作原理以及如何克服这个问题?

【问题讨论】:

    标签: android android-fragments android-lifecycle


    【解决方案1】:

    我想你应该打电话给 addToBackStack 为您添加的每个片段赋予不同的名称。 阅读你的代码在我看来你不这样做。

    【讨论】:

    • 正如我提到的,问题关注片段 C,我通过调用 addToBackStack(null) 添加它。
    猜你喜欢
    • 1970-01-01
    • 2014-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多