use fragment as scope for MediaFragmentViewModel

This commit is contained in:
Jannik 2022-04-03 16:55:54 +02:00
parent 629c144c5b
commit 3a71bdd2c7
Signed by: Seil0
GPG Key ID: E8459F3723C52C24
4 changed files with 10 additions and 12 deletions

View File

@ -8,8 +8,7 @@ import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentActivity import androidx.fragment.app.viewModels
import androidx.fragment.app.activityViewModels
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
import androidx.viewpager2.adapter.FragmentStateAdapter import androidx.viewpager2.adapter.FragmentStateAdapter
import com.bumptech.glide.Glide import com.bumptech.glide.Glide
@ -37,7 +36,7 @@ class MediaFragment(private val mediaIdStr: String) : Fragment() {
private lateinit var binding: FragmentMediaBinding private lateinit var binding: FragmentMediaBinding
private lateinit var pagerAdapter: FragmentStateAdapter private lateinit var pagerAdapter: FragmentStateAdapter
private val model: MediaFragmentViewModel by activityViewModels() private val model: MediaFragmentViewModel by viewModels()
private val fragments = arrayListOf<Fragment>() private val fragments = arrayListOf<Fragment>()
private var watchlistJobRunning = false private var watchlistJobRunning = false
@ -54,7 +53,7 @@ class MediaFragment(private val mediaIdStr: String) : Fragment() {
binding.frameLoading.visibility = View.VISIBLE binding.frameLoading.visibility = View.VISIBLE
// tab layout and pager // tab layout and pager
pagerAdapter = ScreenSlidePagerAdapter(requireActivity()) pagerAdapter = ScreenSlidePagerAdapter(this)
// fix material components issue #1878, if more tabs are added increase // fix material components issue #1878, if more tabs are added increase
binding.pagerEpisodesSimilar.offscreenPageLimit = 2 binding.pagerEpisodesSimilar.offscreenPageLimit = 2
binding.pagerEpisodesSimilar.adapter = pagerAdapter binding.pagerEpisodesSimilar.adapter = pagerAdapter
@ -135,7 +134,6 @@ class MediaFragment(private val mediaIdStr: String) : Fragment() {
fragments.clear() fragments.clear()
pagerAdapter.notifyItemRangeRemoved(0, fragmentsSize) pagerAdapter.notifyItemRangeRemoved(0, fragmentsSize)
// add the episodes fragment (as tab). Note: Movies are tv shows!
MediaFragmentEpisodes().also { MediaFragmentEpisodes().also {
fragments.add(it) fragments.add(it)
pagerAdapter.notifyItemInserted(fragments.indexOf(it)) pagerAdapter.notifyItemInserted(fragments.indexOf(it))
@ -224,7 +222,7 @@ class MediaFragment(private val mediaIdStr: String) : Fragment() {
/** /**
* A simple pager adapter * A simple pager adapter
*/ */
private inner class ScreenSlidePagerAdapter(fa: FragmentActivity) : FragmentStateAdapter(fa) { private inner class ScreenSlidePagerAdapter(fragment: Fragment) : FragmentStateAdapter(fragment) {
override fun getItemCount(): Int = fragments.size override fun getItemCount(): Int = fragments.size
override fun createFragment(position: Int): Fragment = fragments[position] override fun createFragment(position: Int): Fragment = fragments[position]

View File

@ -8,7 +8,7 @@ import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.appcompat.widget.PopupMenu import androidx.appcompat.widget.PopupMenu
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import androidx.fragment.app.activityViewModels import androidx.fragment.app.viewModels
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import org.mosad.teapod.R import org.mosad.teapod.R
@ -22,7 +22,7 @@ class MediaFragmentEpisodes : Fragment() {
private lateinit var binding: FragmentMediaEpisodesBinding private lateinit var binding: FragmentMediaEpisodesBinding
private lateinit var adapterRecEpisodes: EpisodeItemAdapter private lateinit var adapterRecEpisodes: EpisodeItemAdapter
private val model: MediaFragmentViewModel by activityViewModels() private val model: MediaFragmentViewModel by viewModels({requireParentFragment()})
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View { override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
binding = FragmentMediaEpisodesBinding.inflate(inflater, container, false) binding = FragmentMediaEpisodesBinding.inflate(inflater, container, false)

View File

@ -5,7 +5,7 @@ import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import androidx.fragment.app.activityViewModels import androidx.fragment.app.viewModels
import org.mosad.teapod.databinding.FragmentMediaSimilarBinding import org.mosad.teapod.databinding.FragmentMediaSimilarBinding
import org.mosad.teapod.ui.activity.main.viewmodel.MediaFragmentViewModel import org.mosad.teapod.ui.activity.main.viewmodel.MediaFragmentViewModel
import org.mosad.teapod.util.adapter.MediaItemAdapter import org.mosad.teapod.util.adapter.MediaItemAdapter
@ -16,7 +16,7 @@ import org.mosad.teapod.util.toItemMediaList
class MediaFragmentSimilar : Fragment() { class MediaFragmentSimilar : Fragment() {
private lateinit var binding: FragmentMediaSimilarBinding private lateinit var binding: FragmentMediaSimilarBinding
private val model: MediaFragmentViewModel by activityViewModels() private val model: MediaFragmentViewModel by viewModels({requireParentFragment()})
private lateinit var adapterSimilar: MediaItemAdapter private lateinit var adapterSimilar: MediaItemAdapter

View File

@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<LinearLayout <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/linear_episodes"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:orientation="vertical"> android:orientation="vertical">