Solution for Data is getting fetched from firestore , it displays in log and only on first tab in tablayout-viewpager but does not get displayed in other tabs
is Given Below:
Main Fragment- here data is being fetched from firestore and tab position is passed to second fragment .. Also here same single fragment is used for all tabs and only data is getting changedenter image description here
enter image description here
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
Second Fragment- here particular category data is fetched and is getting displayed in the log but not in recycler view fragment
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)
})
}
MainAdapter
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()
}
}
}