Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Kotlin隐藏替换的碎片don';行不通_Android_Kotlin_Replace_Fragment_Hide - Fatal编程技术网

Android Kotlin隐藏替换的碎片don';行不通

Android Kotlin隐藏替换的碎片don';行不通,android,kotlin,replace,fragment,hide,Android,Kotlin,Replace,Fragment,Hide,我有一个带有约束的片段,我想保留它 <fragment android:id="@+id/fr_test" android:name="com.test.FragmentTest" android:layout_width="match_parent" android:layout_height="match_parent"/> 我使用事务重新创建片段,保持相同的容器使用相同的约束 fm.beginTransaction().replace(

我有一个带有约束的片段,我想保留它

    <fragment
    android:id="@+id/fr_test"
    android:name="com.test.FragmentTest"
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>
我使用事务重新创建片段,保持相同的容器使用相同的约束

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()
但仍然如此


我做错了什么?

当你调用
replace
时,他调用
remove(fragment)
,然后调用
add(int,fragment,string)
。我认为您应该使用
add
方法,而不是
replace
,并使用
hide
show

控制UI。您可以使用框架布局来替换/显示/隐藏片段。我使用ConstraintLayout是因为问题不在于如何隐藏,问题在于隐藏替换的片段,在替换成功后,我知道,但如果我只添加我不删除旧片段,我的问题是,有时我想隐藏/显示,有时我想重置片段以便重新创建。隐藏/显示工作正常,直到我更换。然后引用丢失,我无法显示/隐藏如果您只需要显示/隐藏,请调用此函数并添加新片段。如果需要重置,请在添加之前单独调用remove。否?我想这将是事实,我的第一个片段不是用add动态添加的,而是直接用xml添加的。可能我应该从xml中删除它并动态添加,这样引用就不会丢失。我以后再试试。我这样做是为了重用容器中片段的约束
fm.beginTransaction().hide(mainActivity.fragRef).commit()
fm.beginTransaction().show(mainActivity.fragRef).commit()