【问题标题】:Kotlin hide replaced fragments don't workKotlin 隐藏替换的片段不起作用
【发布时间】:2023-04-04 03:37:02
【问题描述】:

我有一个要保留的约束片段

    <fragment
    android:id="@+id/fr_test"
    android:name="com.test.FragmentTest"
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>

我使用事务来隐藏/显示它和所有 .工作正常

fm.beginTransaction().hide(mainActivity.fr_test).commit()
fm.beginTransaction().show(mainActivity.fr_test).commit()

我使用事务来重新创建片段,保持相同的容器使用相同的约束

fm.beginTransaction().replace(R.id.mainActivity.fr_test, FragmentTest).commit()

但是,如果现在我尝试使用与以前相同的引用隐藏/显示片段,它什么也不做。我想引用丢失了,但我不知道如何找到它们。我试图像这样保存参考:

fragRef = FragmentTest()
viewsManager.fm.beginTransaction().replace(R.id.fr_test, fragRef).commit()

然后使用:

fm.beginTransaction().hide(mainActivity.fragRef).commit()
fm.beginTransaction().show(mainActivity.fragRef).commit()

但还是一样。

我做错了什么?

【问题讨论】:

标签: android kotlin replace fragment hide


【解决方案1】:

当你打电话给replace时,他打电话给remove(fragment),然后打电话给add(int, fragment, string)。我认为您应该使用add 方法而不是replace 并使用hideshow 控制您的用户界面

【讨论】:

  • 我知道,但是如果我只添加我不会删除旧片段,我的问题是有时我想隐藏/显示,有时我想重置片段所以我重新创建。隐藏/显示工作正常,直到我更换。然后参考丢失,我无法显示/隐藏
  • 如果您只需要显示/隐藏,请调用它并添加新片段。如果需要重置,请在添加前单独调用 remove。没有?
  • 我想这将是事实,我的第一个片段不是用add动态添加的,而是直接在xml中。可能我应该从 xml 中删除它并动态添加它,然后引用不会丢失。我稍后会尝试。我这样做是为了重用容器中片段的约束
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-06
  • 2015-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多