活動_main.xml
<androidx.fragment.app.FragmentContainerView
android:id="@ id/nav_host_fragment"
android:name="androidx.navigation.fragment.NavHostFragment"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:defaultNavHost="true"
app:navGraph="@navigation/nav_graph" >
</androidx.fragment.app.FragmentContainerView>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@ id/bottom_controls"
android:layout_width="match_parent"
android:layout_height="72dp"
android:onClick="onSongInfoClick"
android:background="@drawable/lyt_rounded_bottom_music"
android:paddingStart="10dp"
android:paddingEnd="10dp"
android:elevation="25dp"
app:layout_constraintTop_toBottomOf="@id/nav_host_fragment">
起始目的地是一個由各種選項卡組成的ViewPagerFragment。
當我從activity_main單擊bottom_controls視圖時,我導航到SongDetailsFragment
我不想證明bottom_controls在songDetailsFragment
這是我嘗試這樣做的方法:
主活動.kt
val currentFragment = supportFragmentManager.currentNavigationFragment
if(currentFragment !== SongDetailsFragment())
{
viewModel.showMiniPlayer()
}
else{
viewModel.hideMiniPlayer()
}
SongDetailsFragment.kt
class SongDetailsFragment : BaseSongDetailFragment() {
.....
}
BaseSongDetailFragment.kt
open class BaseSongDetailFragment : Fragment() {
private val songDetailViewModel by sharedViewModel<SongDetailViewModel>()
protected val mainViewModel by inject<MainViewModel>()
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
showHideBottomSheet()
}
override fun onPause() {
showHideBottomSheet()
super.onPause()
}
override fun onResume() {
showHideBottomSheet()
super.onResume()
}
private fun showHideBottomSheet() {
val currentData = songDetailViewModel.currentData.value ?: return
if (currentData.id == 0L) return
val currentFragment =
requireActivity().supportFragmentManager.currentNavigationFragment
if(currentFragment == this as SongDetailsFragment){
mainViewModel.hideMiniPlayer()
}
else{
mainViewModel.showMiniPlayer()
}
}
}
問題:
我第一次啟動應用程式并導航到songDetailsFragment 時,它顯示了bottom_controls視圖。
隨后,它沒有顯示。
我希望它根本不顯示。
uj5u.com熱心網友回復:
您可以OnDestinationChangedListener在您的活動中使用來監聽 currentDestination 的變化。
navController.addOnDestinationChangedListener { _, destination, _ ->
if (destination.id == R.id.songDetailsFragment)
viewModel.hideMiniPlayer()
else
viewModel.showMiniPlayer()
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/354775.html
