当我替换一个片段时,它被破坏了。我尝试在活动的onCreate中创建片段并将其引用保留在活动中,并在我“显示”或“重新打开”它时通过调用带有引用的replace来使用它,但这无济于事,并且片段被销毁(替换时)由另一个片段)并重新创建。应该怎么解决?
我想要实现的是类似WhatsApp这样的内容,其中片段在不可见时不应该被破坏,除非我不使用滑动手势而是常规按钮。
谢谢。
答案 0 :(得分:3)
您需要使用addToBackStack()
来修改片段事务,如下所示:-
FragmentA fragmentA = new FragmentA();
getFragmentManager().beginTransaction()
.replace(R.id.YOUR_CONTENT,fragmentA,"YOUR_TARGET_FRAGMENT_TAG")
.addToBackStack("YOUR_SOURCE_FRAGMENT_TAG").commit();
您可以检查该片段是否已在堆栈中存在或不像下面一样
Fragment fragment = getFragmentManager().findFragmentByTag("YOUR_TARGET_FRAGMENT_TAG");
if (fragment!=null && fragment instanceof FragmentA) {
//you are good to go, do your logic
}
答案 1 :(得分:0)
使用捆绑包保存状态信息并在com.fasterxml.jackson.module.kotlin.readValue
内恢复它吗?
答案 2 :(得分:0)
FragmentTransaction.replace():替换添加到容器中的现有片段。
因此,这会将片段从堆栈中删除。
使用FragmentTransaction.addToBackStack()
将Fragment
添加到另一个(堆栈)的顶部。
答案 3 :(得分:0)
解决方案是使用PagerAdapter的ViewPager,更具体地说,我的情况是FragmentPagerAdapter。
PagerAdapter的实现,将每个页面表示为一个片段,只要用户可以返回页面,该片段就会永久保存在片段管理器中。此版本的分页器最适合用于少数几个通常要通过页面分页的静态片段,例如一组选项卡。 用户访问的每个页面的片段将保留在内存中,尽管其视图层次结构可能在不可见时被破坏。
https://developer.android.com/reference/android/support/v4/app/FragmentPagerAdapter
我很早以前就处理过它,尽管我没有考虑过,因为那时我将它与TabLayout一起使用,我认为它们紧密结合。