Fix navigation bug

Fix a bug where pressing on multiple library items at once would cause a crash.
This commit is contained in:
OxygenCobalt 2020-09-09 19:15:39 -06:00
parent f7e25d3fa8
commit d7b9ec4281
3 changed files with 32 additions and 7 deletions

View file

@ -46,6 +46,7 @@ class LibraryFragment : Fragment() {
override fun onPause() { override fun onPause() {
super.onPause() super.onPause()
callback.isEnabled = false callback.isEnabled = false
} }

View file

@ -8,18 +8,22 @@ import android.view.ViewGroup
import androidx.databinding.DataBindingUtil import androidx.databinding.DataBindingUtil
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import androidx.fragment.app.activityViewModels import androidx.fragment.app.activityViewModels
import androidx.lifecycle.ViewModelProvider
import androidx.navigation.fragment.findNavController import androidx.navigation.fragment.findNavController
import org.oxycblt.auxio.R import org.oxycblt.auxio.R
import org.oxycblt.auxio.databinding.FragmentLibraryListBinding import org.oxycblt.auxio.databinding.FragmentLibraryListBinding
import org.oxycblt.auxio.library.adapters.ArtistAdapter import org.oxycblt.auxio.library.adapters.ArtistAdapter
import org.oxycblt.auxio.music.MusicViewModel import org.oxycblt.auxio.music.MusicViewModel
import org.oxycblt.auxio.music.models.Artist
import org.oxycblt.auxio.recycler.ClickListener import org.oxycblt.auxio.recycler.ClickListener
import org.oxycblt.auxio.recycler.applyDivider import org.oxycblt.auxio.recycler.applyDivider
class LibraryListFragment : Fragment() { class LibraryListFragment : Fragment() {
private val musicModel: MusicViewModel by activityViewModels { private val musicModel: MusicViewModel by activityViewModels()
MusicViewModel.Factory(requireActivity().application)
private val libraryModel: LibraryViewModel by lazy {
ViewModelProvider(this).get(LibraryViewModel::class.java)
} }
override fun onCreateView( override fun onCreateView(
@ -33,11 +37,7 @@ class LibraryListFragment : Fragment() {
binding.libraryRecycler.adapter = ArtistAdapter( binding.libraryRecycler.adapter = ArtistAdapter(
musicModel.artists.value!!, musicModel.artists.value!!,
ClickListener { artist -> ClickListener { navToArtist(it) }
findNavController().navigate(
LibraryListFragmentDirections.actionShowArtist(artist.id)
)
}
) )
binding.libraryRecycler.applyDivider() binding.libraryRecycler.applyDivider()
binding.libraryRecycler.setHasFixedSize(true) binding.libraryRecycler.setHasFixedSize(true)
@ -46,4 +46,21 @@ class LibraryListFragment : Fragment() {
return binding.root return binding.root
} }
override fun onPause() {
super.onPause()
libraryModel.isAlreadyNavigating = false
}
private fun navToArtist(artist: Artist) {
// Don't navigate to a fragment multiple times if multiple items are accepted.
if (!libraryModel.isAlreadyNavigating) {
libraryModel.isAlreadyNavigating = true
findNavController().navigate(
LibraryListFragmentDirections.actionShowArtist(artist.id)
)
}
}
} }

View file

@ -0,0 +1,7 @@
package org.oxycblt.auxio.library
import androidx.lifecycle.ViewModel
class LibraryViewModel : ViewModel() {
var isAlreadyNavigating = false
}