# #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
«ssetListData(it)
«? Как вы обновляетеRecyclerView
?