Return 绑定数据或回收站视图问题

Return either binding data or recycler view problem

在我的片段中,我有一些图像和视图通过绑定数据获取它们的值,在它们下面有一个 RecyclerView。图片和文本视图显示成功,但我的 Recyclerview 不会显示。如果我 return 只有我的视图,RecyclerView 会显示但绑定的数据不会。两个我都想看

[]

class DetailFragment : Fragment(), LessonRecyclerAdapter.LessonItemListener {

    private lateinit var viewModel: SharedViewModel
    private lateinit var recyclerView: RecyclerView

    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        val view = inflater.inflate(R.layout.fragment_detail, container, false)
        recyclerView = view.findViewById(R.id.lessonRecyclerView)
        navController = Navigation.findNavController(requireActivity(), R.id.nav_host )

        viewModel = ViewModelProvider(requireActivity()).get(SharedViewModel::class.java)
        viewModel.lessonData.observe(viewLifecycleOwner, Observer {
            val adapter =
                LessonRecyclerAdapter(
                    it,
                    this
                )
            recyclerView.adapter = adapter
        })

        // return binding data
        val binding = FragmentDetailBinding.inflate(inflater, container, false)
        binding.lifecycleOwner = this
        binding.viewModel = viewModel
        return binding.root
        //return view
    }

如您所见,有两个 inflates,一个用于绑定,另一个用于查看(用于 recyclerview 设置)。简单的解决方案是直接使用绑定变量中的 recyclerview 将列表设置为:

private lateinit var binding: FragmentDetailBinding

override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        navController = Navigation.findNavController(requireActivity(), R.id.nav_host )

        viewModel = ViewModelProvider(requireActivity()).get(SharedViewModel::class.java)

        binding = FragmentDetailBinding.inflate(inflater, container, false)
        binding.lifecycleOwner = this
        binding.viewModel = viewModel

        viewModel.lessonData.observe(viewLifecycleOwner, Observer {
            val adapter =
                LessonRecyclerAdapter(
                    it,
                    this
                )
            // directly access the view using ids                
            binding.lessonRecyclerView.adapter = adapter
        })

        return binding.root
    }

另一种选择是 use binding adapters 使用实时数据来设置适配器并将数据传递给适配器。