首页 > 解决方案 > 返回绑定数据或回收器视图问题

问题描述

在我的片段中,我有一些图像和视图通过绑定数据来获取它们的值,在它们下面是一个 RecyclerView。图像和文本视图显示成功,但我的 Recyclerview 不会显示。如果我只返回我的视图,则 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
    }

标签: androidkotlinandroid-recyclerviewandroid-databinding

解决方案


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

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
    }

另一种选择是使用具有实时数据的绑定适配器来设置适配器并将数据传递给适配器。


推荐阅读