【问题标题】:Android: Replace fragment while asynctask running failsAndroid:异步任务运行失败时替换片段
【发布时间】:2016-09-25 22:18:50
【问题描述】:

我有一个带有FrameLayout 的主要活动,我在其中根据(驻留)菜单选择动态更改片段。最近(可能有新的 SDK 版本?)

我观察到,当 AsyncTask 在当前 Fragment (SwipeRefresh) 上运行并且我想用另一个 Fragment 替换它时,现有 Fragment 保持可见(onTop 基本上)并且新的 Fragment 被隐藏(可能落后 - 我知道它在那里,因为它显示对话框或做一些事情,只是它没有显示)。按下后也会返回到“根”片段(标题栏也会更改文本),但是,运行异步任务的那个片段会一直挂在FrameLayout 中(直到应用程序关闭)。非常感谢任何帮助。 片段替换:

getSupportFragmentManager()
.beginTransaction().replace(R.id.container, targetFragment, "fragment")             .setTransitionStyle(FragmentTransaction.TRANSIT_FRAGMENT_OPEN).commit();

【问题讨论】:

    标签: android android-fragments android-asynctask


    【解决方案1】:

    我在这里找到了解决方案:https://stackoverflow.com/a/27073879/5181489。最后,它不是我想的异步任务,似乎问题出在SwipeRefreshLayout 上,并且在onPause 中调用时解决了它:

    if (refreshView != null) {
        refreshView.setRefreshing(false);
        refreshView.destroyDrawingCache();
        refreshView.clearAnimation();
    }
    

    【讨论】:

      【解决方案2】:

      您是否尝试在片段的 onPause 或 onStop 回调中关闭正在运行的 AsyncTask?

      【讨论】:

      • 感谢您的建议,我认为这是问题所在。好吧,我试试,我不确定有多成功,但我确实在onStop() 中的任务上调用了cancel(),并在异步任务中检查isCancelled()
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多