使用 ViewModel 和 NavigationComponents 在 onViewCreated() 中仅设置一次适配器
Set adapters only once at onViewCreated() with ViewModel and NavigationComponents
我一直在阅读 viewmodel-savedstate,我的用例如下,我膨胀一个 recyclerview 并用数据填充它,我正在使用 ConcatAdapter 并且因为我需要构建我的视图以便我初始化我的 onViewCreated 中的适配器,这在启动时工作正常,但如果我从 FragmentA 转到 FragmentB 然后回来,它将再次传递给 onViewCreated() 因此它将重新创建我的适配器,用重复的项目重新填充 recyclerview,是吗一种只设置这些适配器一次的方法? savedStateHandle 是一个好方法吗?
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
val firstAdapter = FirstAdapter(listOfData)
val secondAdapter = SecondAdapter(listOfData)
val thirdAdapter = ThirdAdapter(listOfData)
concatAdapter.addAdapter(firstAdapter)
concatAdapter.addAdapter(secondAdapter)
concatAdapter.addAdapter(thirdAdapter)
}
所以发生的事情是,我在 FragmentA 中膨胀它,没关系,当我从 Fragment A 转到 Fragment B 并返回时,这将被重新创建并复制到我的 recyclerview
我尝试使用 concatAdapter.getAdapters().clear()
但我无法在设置之前清除列表,因为它是 unmodifiableList
如何只在我的 Fragment 上进行一次此设置,或者每次返回时都从头开始重新创建它?
每次调用 onViewCreated()
时,您都需要为新的 RecyclerView
实例创建一个新的 ConcatAdapter
实例。
之前的 RecyclerView
应该在调用 onDestroyView()
时被销毁,您还必须在同一点删除对适配器的任何引用以避免内存泄漏(适配器持有硬引用它的 RecyclerView
。您不能在 onCreate()
中只创建一个实例并一遍又一遍地重复使用它。
通过创建一个新的 ConcatAdapter
实例,您可以确保 addAdapter
只为您的第一个、第二个和第三个子适配器调用一次。
我一直在阅读 viewmodel-savedstate,我的用例如下,我膨胀一个 recyclerview 并用数据填充它,我正在使用 ConcatAdapter 并且因为我需要构建我的视图以便我初始化我的 onViewCreated 中的适配器,这在启动时工作正常,但如果我从 FragmentA 转到 FragmentB 然后回来,它将再次传递给 onViewCreated() 因此它将重新创建我的适配器,用重复的项目重新填充 recyclerview,是吗一种只设置这些适配器一次的方法? savedStateHandle 是一个好方法吗?
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
val firstAdapter = FirstAdapter(listOfData)
val secondAdapter = SecondAdapter(listOfData)
val thirdAdapter = ThirdAdapter(listOfData)
concatAdapter.addAdapter(firstAdapter)
concatAdapter.addAdapter(secondAdapter)
concatAdapter.addAdapter(thirdAdapter)
}
所以发生的事情是,我在 FragmentA 中膨胀它,没关系,当我从 Fragment A 转到 Fragment B 并返回时,这将被重新创建并复制到我的 recyclerview
我尝试使用 concatAdapter.getAdapters().clear()
但我无法在设置之前清除列表,因为它是 unmodifiableList
如何只在我的 Fragment 上进行一次此设置,或者每次返回时都从头开始重新创建它?
每次调用 onViewCreated()
时,您都需要为新的 RecyclerView
实例创建一个新的 ConcatAdapter
实例。
之前的 RecyclerView
应该在调用 onDestroyView()
时被销毁,您还必须在同一点删除对适配器的任何引用以避免内存泄漏(适配器持有硬引用它的 RecyclerView
。您不能在 onCreate()
中只创建一个实例并一遍又一遍地重复使用它。
通过创建一个新的 ConcatAdapter
实例,您可以确保 addAdapter
只为您的第一个、第二个和第三个子适配器调用一次。