@AndroidEntryPoint class MoviesFragment : Fragment() {
private lateinit var binding: FragmentMoviesBinding
@Inject
lateinit var sliderAdapter: SliderAdapter
@Inject
lateinit var upcomingMoviesAdapter: UpcomingMoviesAdapter
@Inject
lateinit var topRatedMoviesAdapter: TopRatedMoviesAdapter
private val viewModel: MoviesViewModel by viewModels()
@Inject
lateinit var apiRepository: ApiRepository
@Inject
lateinit var popularMoviesAdapter: PopularMoviesAdapter
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?,
): View {
binding= FragmentMoviesBinding.inflate(layoutInflater,container,false)
return binding.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
binding.apply {
lifecycleScope.launch {
viewModel.popularMovieList.collect{
popularMoviesAdapter.submitData(it)
}
}
popularMoviesAdapter.setOnItemClickListener {
val direction = MoviesFragmentDirections.actionMoviesFragmentToMovieDetailsFragment(it.id,it.poster_path)
findNavController().navigate(direction)
}
popularRecyclerView.apply {
layoutManager = LinearLayoutManager(requireContext(),
LinearLayoutManager.HORIZONTAL, false)
adapter = popularMoviesAdapter
}
lifecycleScope.launch {
popularMoviesAdapter.loadStateFlow.collect{
val state = it.refresh
popularProgressBar.isVisible = state is LoadState.Loading
}
}
lifecycleScope.launch {
viewModel.topRatedMovieList.collect{
topRatedMoviesAdapter.submitData(it)
}
}
topRatedMoviesAdapter.setOnItemClickListener {
val direction = MoviesFragmentDirections.actionMoviesFragmentToMovieDetailsFragment(it.id,it.poster_path)
findNavController().navigate(direction)
}
topRatedRecyclerView.apply {
layoutManager = LinearLayoutManager(requireContext(),
LinearLayoutManager.HORIZONTAL, false)
adapter = topRatedMoviesAdapter
}
lifecycleScope.launch {
topRatedMoviesAdapter.loadStateFlow.collect{
val state = it.refresh
topRatedProgressBar.isVisible = state is LoadState.Loading
}
}
lifecycleScope.launch {
viewModel.upcomingMovieList.collect{
upcomingMoviesAdapter.submitData(it)
}
}
upcomingMoviesAdapter.setOnItemClickListener {
val direction = MoviesFragmentDirections.actionMoviesFragmentToMovieDetailsFragment(it.id,it.poster_path)
findNavController().navigate(direction)
}
upcomingRecyclerView.apply {
layoutManager = LinearLayoutManager(requireContext(),
LinearLayoutManager.HORIZONTAL, false)
adapter = upcomingMoviesAdapter
}
lifecycleScope.launch {
upcomingMoviesAdapter.loadStateFlow.collect{
val state = it.refresh
upcomingProgressBar.isVisible = state is LoadState.Loading
}
}
lifecycleScope.launch {
viewModel.nowPlayingMovieList.collect {
sliderAdapter.submitData(it)
}
}
sliderAdapter.setOnItemClickListener {
val direction = MoviesFragmentDirections.actionMoviesFragmentToMovieDetailsFragment(it.id,it.poster_path)
findNavController().navigate(direction)
}
viewpagerSlider.apply {
setViewPager()
adapter = sliderAdapter
}
}
}
private fun setViewPager() {
binding.viewpagerSlider.clipToPadding = false
binding.viewpagerSlider.clipChildren = false
binding.viewpagerSlider.offscreenPageLimit = 3
binding.viewpagerSlider.getChildAt(0).overScrollMode = RecyclerView.OVER_SCROLL_NEVER
binding.viewpagerSlider.adapter = sliderAdapter
val middlePosition = Int.MAX_VALUE / 2
binding.viewpagerSlider.setCurrentItem(middlePosition, false)
binding.viewpagerSlider.registerOnPageChangeCallback(object : ViewPager2.OnPageChangeCallback() {
override fun onPageSelected(position: Int) {
super.onPageSelected(position)
val itemCount = sliderAdapter.itemCount
if (position == 0) {
binding.viewpagerSlider.setCurrentItem(itemCount / 2, false)
} else if (position == itemCount - 1) {
binding.viewpagerSlider.setCurrentItem(itemCount / 2, false)
}
}
})
val compositePageTransformer = CompositePageTransformer()
compositePageTransformer.addTransformer(MarginPageTransformer(25))
compositePageTransformer.addTransformer { page, position ->
val r: Float = 1 - abs(position)
page.scaleY = 0.90f + r * 0.10f
}
binding.viewpagerSlider.setPageTransformer(compositePageTransformer)
}
}
This is my source code; I'm trying to fetch some images from my API. It's barely working right now. The problem is when I open my fragment I don't see anything all. I see is my background but after I move to another fragment and come back here I can see my viewpager is working fine. What is the problem. How to fix it?