返回绑定数据或回收者视图问题

问题描述 投票:1回答:1

在我的片段中,我有一些图像和视图通过绑定数据来获取其值,并在其下方有一个RecyclerView。图像和文本视图显示成功,但我的Recyclerview无法显示。如果仅返回视图,则显示RecyclerView,但不显示绑定的数据。我想同时查看它们。

[<< img src =“ https://image.soinside.com/eyJ1cmwiOiAiaHR0cHM6Ly9pLnN0YWNrLmltZ3VyLmNvbS9SaHhwaS5wbmcifQ==” alt =“在此处输入图像描述”>]

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
    }
android kotlin android-recyclerview android-databinding
1个回答
1
投票

您可以看到,有两种膨胀,一种用于绑定,另一种用于视图(用于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使用实时数据来设置适配器并将数据传递到适配器。

© www.soinside.com 2019 - 2024. All rights reserved.