Данные извлекаются из firestore , они отображаются в журнале и только на первой вкладке в tablayout-viewpager, но не отображаются на других вкладках

# #android #kotlin #google-cloud-firestore #android-viewpager #android-tablayout

Вопрос:

Основной фрагмент — здесь данные извлекаются из firestore, а позиция вкладки передается второму фрагменту .. Также здесь один и тот же фрагмент используется для всех вкладок, и меняются только данные введите описание изображения здесь
введите описание изображения здесь

     homeViewModel?.fetchCategories()?.observe(viewLifecycleOwner, Observer {
                val size = it.size
                val adapter = HomeAdapter(requireActivity(), size)
                binding?.vpHome?.adapter = adapter
                TabLayoutMediator(binding?.tabHome!!, binding?.vpHome!!) { tab, position ->
                    tab.text = it[position].name
                }.attach()
                binding?.vpHome?.isUserInputEnabled = true
            })
    
            binding?.tabHome?.setOnTabSelectedListener(object : OnTabSelectedListener {
                override fun onTabSelected(tab: TabLayout.Tab) {
                    val position = tab.position
                    val fragment = CricketFragment() //Your Fragment
                    val bundle = Bundle()
                    bundle.putInt("pos", position)  // Key, value
                    fragment.setArguments(bundle)
                    childFragmentManager.beginTransaction().replace(R.id.content, fragment).commit()
                }
    
                override fun onTabUnselected(tab: TabLayout.Tab?) {
    
                }
    
                override fun onTabReselected(tab: TabLayout.Tab?) {
    
                }
            })
            binding?.tabHome?.tabGravity = TabLayout.GRAVITY_FILL
            dsadapter = DetailsAdapter(requireContext())
            binding?.rvview?.layoutManager = LinearLayoutManager(activity)
            binding?.rvview?.adapter = dsadapter
 

Второй фрагмент — здесь данные конкретной категории извлекаются и отображаются в журнале, но не во фрагменте представления переработчика

 private fun init() {
        homeViewModel = ViewModelProvider.NewInstanceFactory().create(HomeViewModel::class.java)
        setupRecyclerView()
        val bundle = this.arguments
        if (bundle != null) {
            val position = bundle.getInt("pos", -1)
            val str = (position   1).toString()
            Toast.makeText(requireContext(), "pos is $str", Toast.LENGTH_SHORT).show()
            fetchepisodes(str)// Key, default value
        }
    }

    private fun setupRecyclerView() {
        adapter = DetailsAdapter(requireContext())
        binding?.rvDetails?.layoutManager = LinearLayoutManager(activity)
        binding?.rvDetails?.adapter = adapter
    }

    private fun fetchepisodes(str: String) {
        homeViewModel?.fetchJourneyEpisodes(str)?.observe(viewLifecycleOwner, Observer {
            Log.d("data", "data is ${Gson().toJson(it)}")
            adapter?.setListData(it)
            list.addAll(it)
        })
    }
 

Главный адаптер

 class HomeAdapter(
        fa: FragmentActivity, internal var totalTabs: Int,
) : FragmentStateAdapter(fa) {
    override fun getItemCount(): Int {
        return totalTabs
    }

    override fun createFragment(position: Int): Fragment {
        when (position) {
            0 -> return CricketFragment()
            else -> return CricketFragment()
        }
    }


}
 

Комментарии:

1. Что именно в этом коде работает не так, как вы ожидаете? Расскажите нам, что не так с общим кодом. Есть ли у вас какие-либо ошибки?

2. Первый момент-никогда не создавайте глобальный экземпляр в Observer . Вы можете создавать экземпляры в onViewCreated() и управлять видимостью в Observer . И можете ли вы ввести код adapter «s setListData(it) «? Как вы обновляете RecyclerView ?