Вернуть либо данные привязки, либо проблему с представлением переработчика - PullRequest
1 голос
/ 28 апреля 2020

Внутри моего фрагмента у меня есть некоторые изображения и представления, которые получают свои значения путем привязки данных, а под ними - RecyclerView. Изображения и текстовые представления отображаются успешно, но мой Recyclerview не будет отображаться. Если я возвращаю только мое представление, RecyclerView показывает, но связанные данные нет. Я хочу просмотреть их оба.

[enter image description here]

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
    }

1 Ответ

0 голосов
/ 28 апреля 2020

Как вы можете видеть, есть две надувания, одна для привязки, а другая для просмотра (для настройки в обзоре реселлера). Простое решение - напрямую использовать 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
    }

Другой вариант - использовать привязывающие адаптеры с действительными данными для установки адаптера и передачи данные к адаптеру.

...