检测嵌套的 RecyclerView 项目何时附加/分离于用户视图

Detecting when nested RecyclerView item is attached/detached from user view

提问人:Simon Rex 提问时间:11/9/2023 更新时间:11/9/2023 访问量:18

问:

我正在尝试实现一个包含 RecyclerViews 列表的 RecyclerView。基本上,我有一个房间列表,每个房间都可以有一个设备列表。我已经实现了代码,该应用程序能够显示所有项目。但是,当我滚动浏览项目时,当房间滚动到/退出用户视图时,只有房间会触发 & 功能。但是,当每个房间内的设备滚动到用户视图中/退出时,它们不会触发这些功能。为什么当设备滚动到/退出用户视图时,设备嵌套的 RecyclerView 不会触发 & 函数,我该如何解决?onViewAttachedToWindowonViewDetachedFromWindowonViewAttachedToWindowonViewDetachedFromWindow

以下是在 Kotlin 中实现的相关代码片段。

  1. 主片段
override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View {
    recyclerView = binding.recyclerView;
    recyclerView.layoutManager = LinearLayoutManager(context);
    val dataset = ...
    val adapter = RoomRecyclerViewAdapter(
        requireContext(),
        dataset
    )
    recyclerView.adapter = adapter

    viewModel.roomsList.observe(requireActivity()) {
        dataset.clear()
        dataset.addAll(it)
        recyclerView.post { adapter.notifyDataSetChanged() }
    }
}
  1. RoomRecyclerView适配器
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
    val layoutManager = LinearLayoutManager(context)
    deviceRecyclerView.layoutManager = layoutManager

    // devices that are children of this room
    val devicesDataset = ...
    val devicesAdapter = DeviceRecyclerViewAdapter(
            context,
            devicesDataset,
    )
    deviceRecyclerView.adapter = devicesAdapter
}

override fun onViewAttachedToWindow(holder: ViewHolder) {
    super.onViewAttachedToWindow(holder)
    Timber.i("room onViewAttachedToWindow")
}

override fun onViewDetachedFromWindow(holder: ViewHolder) {
    super.onViewDetachedFromWindow(holder)
    Timber.i("room onViewDetachedFromWindow")
}
  1. DeviceRecyclerView适配器
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
    ...
}

override fun onViewAttachedToWindow(holder: ViewHolder) {
    super.onViewAttachedToWindow(holder)
    Timber.i("device onViewAttachedToWindow")
}

override fun onViewDetachedFromWindow(holder: ViewHolder) {
    super.onViewDetachedFromWindow(holder)
    Timber.i("device onViewDetachedFromWindow")
}
安卓 Android-RecyclerView

评论


答: 暂无答案