【问题标题】:How to refresh Android Fragment v1.3.0 in Java如何用Java刷新Android Fragment v1.3.0
【发布时间】:2021-06-04 11:57:24
【问题描述】:

从新的 Fragment 版本 1.3.0 开始,刷新自身内部的 Fragment 似乎不像在版本 1.2.5 中那样工作。

适用于我的 1.2.5 版项目的代码:

FragmentTransaction ft = getFragmentManager().beginTransaction();
if (Build.VERSION.SDK_INT >= 26) {
   ft.setReorderingAllowed(false);
}
ft.detach(this).attach(this).commit();

但是在 v1.3.0 中使用这个无法刷新 Fragment。

有没有人能解决这个问题?我在发行说明中找不到详细说明任何可能成为问题的更改的文档。谢谢!

【问题讨论】:

  • 您是否尝试过通过getSupportFragmentManager 使用支持片段管理器(当然,如果您的活动扩展AppCompatActivity)?

标签: java android fragment refresh release


【解决方案1】:

根据this issue

这与 Fragment 1.3.0-beta01 release notes 中提到的新状态管理器按预期工作,作为解决以下问题的要求可能导致崩溃的极端情况。

您可以将代码更改为两个单独的事务:

fun Fragment.recreateView() {
    parentFragmentManager
        .beginTransaction()
        .detach(this)
        .commitNow()
    parentFragmentManager
        .beginTransaction()
        .attach(this)
        .commitNow()
}

接着说:

您可能需要为 b/173472486 加注星标以跟踪 Lint 警告以提供快速修复此模式,并加注 b/165840276 为片段添加一流的 API 以在不需要 detach()/attach() 的情况下重新创建其视图。

【讨论】:

  • 分离我的链式 detach(...) 和 attach(...) 调用,每个调用都使用 commit() 就像一个魅力!谢谢!
猜你喜欢
  • 2017-02-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多