I am just stuck here and tried a lot many things but didn't get the solution so the problem is
I am having a Tab host and inside it two tab items and used viewpager2 for displaying the contents from the api using the live data
private fun getAdslot() {
rewardViewModel.aye.observe(viewLifecycleOwner){networkResult->
if(networkResult.status == "success"){
if(networkResult.offers.isEmpty()){
Toast.makeText(requireContext(), "No Task Available", Toast.LENGTH_SHORT).show()
}else{
adapter.taskGAmeList = networkResult
recyclerView.adapter = adapter
Log.d("TaskTabFragment", "getAdslot: $networkResult")
adapter.notifyDataSetChanged()
}
}
}
}
Problem:
so when the parent fragment is created the data is not displayed and also i am getting the list as 0
but soon as I click on the Task again or move from task to reward tab and then to task tab the data list is fetched from the api and the contents are displayed
here is the code for the adapter
class TabItemTaskAdapter(): RecyclerView.Adapter<TabItemTaskAdapter.TaskViewHolder>() {
var taskGAmeList:AyetAdSlot?=null
inner class TaskViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
// val gameImage: ImageView = itemView.findViewById(R.id.iv_game)
val gameName: TextView = itemView.findViewById(R.id.tv_game_name)
val gameSubtitle:TextView = itemView.findViewById(R.id.tv_game_subtitle)
val rewardPrize:TextView = itemView.findViewById(R.id.tv_reward_amount)
val ivGameIcon: AppCompatImageView = itemView.findViewById(R.id.iv_game_icon)
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): TaskViewHolder {
val view = LayoutInflater.from(parent.context).inflate(R.layout.item_task_reward_layout,parent,false)
return TaskViewHolder(view)
}
override fun getItemCount(): Int {
Log.d("TabItemTaskAdapter", "getItemCount: ${taskGAmeList!!.offers.size}")
return taskGAmeList!!.offers.size
}
override fun onBindViewHolder(holder: TaskViewHolder, position: Int) {
Log.d("RewardTabFragment", "onBindViewHolder: ${taskGAmeList!!.offers.size}")
val currentItem = taskGAmeList!!.offers[position]
holder.gameName.text = currentItem.name
holder.gameSubtitle.text = currentItem.description
holder.rewardPrize.text = currentItem.currency_amount.toString()
Glide.with(holder.itemView.context).load(currentItem?.icon).override(96).
into(holder.ivGameIcon)
}
}
below is the code where i am using the tablayout
private fun setUpTaskRewardTabLayout(){
binding.tabLayoutTaskReward.setTabTextColors(ContextCompat.getColor(requireContext(), R.color.light_grey),ContextCompat.getColor(requireContext(),R.color.primary_text_color))
taskRewardTabLayoutAdapter = TaskRewardTabLayoutAdapter(childFragmentManager,lifecycle)
binding.viewPager.adapter = taskRewardTabLayoutAdapter
Log.d("RewardTabFragment", "setUpTaskRewardTabLayout: ${binding.tabLayoutTaskReward.selectedTabPosition} ")
binding.tabLayoutTaskReward.addOnTabSelectedListener(object : TabLayout.OnTabSelectedListener{
override fun onTabSelected(tab: TabLayout.Tab?) {
Log.d("RewardTabFragment", "onTabSelected: ${tab!!.position} ")
binding.viewPager.currentItem = tab.position
taskRewardTabLayoutAdapter.notifyDataSetChanged()
}
override fun onTabUnselected(tab: TabLayout.Tab?) {
taskRewardTabLayoutAdapter.notifyDataSetChanged()
}
override fun onTabReselected(tab: TabLayout.Tab?) {
taskRewardTabLayoutAdapter.notifyDataSetChanged()
}
})
//for Swiping the tab
binding.viewPager.registerOnPageChangeCallback(object : ViewPager2.OnPageChangeCallback(){
override fun onPageSelected(position: Int) {
binding.tabLayoutTaskReward.selectTab(binding.tabLayoutTaskReward.getTabAt(position))
taskRewardTabLayoutAdapter.notifyDataSetChanged()
}
})
}
// FragmentstateAdapter for setting the fragments
class TaskRewardTabLayoutAdapter(fragmentManager: FragmentManager, lifecycle: Lifecycle) :
FragmentStateAdapter(fragmentManager, lifecycle) {
override fun getItemCount(): Int {
return 2
}
override fun createFragment(position: Int): Fragment {
return if(position==0){
TaskTabFragment()
} else{
RewardTabFragment()
}
}
}
Can anyone help me out this

I cannot find a solution but found a Makeshifter (Jugaad)