#android #xml #kotlin #navigation
Вопрос:
activity_main.xml
lt;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" gt; lt;/androidx.fragment.app.FragmentContainerViewgt; lt;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"gt;
Начальное назначение—это фрагмент страницы просмотра, состоящий из различных вкладок.
Когда я нажимаю на представление bottom_controls в activity_main, я перехожу к фрагменту songdetails
Я не хочу показывать, что bottom_controls в фрагменте songdetails
Вот как я пытаюсь это сделать:
Основная активность.тыс. т
val currentFragment = supportFragmentManager.currentNavigationFragment if(currentFragment !== SongDetailsFragment()) { viewModel.showMiniPlayer() } else{ viewModel.hideMiniPlayer() }
Фрагмент песен.kt
class SongDetailsFragment : BaseSongDetailFragment() { ..... }
Базовый фрагмент.kt
open class BaseSongDetailFragment : Fragment() { private val songDetailViewModel by sharedViewModellt;SongDetailViewModelgt;() protected val mainViewModel by injectlt;MainViewModelgt;() 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() } } }
Проблема:
В самый первый раз, когда я запускаю приложение и перехожу к фрагменту songdetails, он показывает представление bottom_controls.
Впоследствии это не проявляется.
Я хочу, чтобы это вообще не было заметно.
Ответ №1:
Вы можете использовать OnDestinationChangedListener
в своей деятельности для прослушивания изменений в текущем определении.
navController.addOnDestinationChangedListener { _, destination, _ -gt; if (destination.id == R.id.songDetailsFragment) viewModel.hideMiniPlayer() else viewModel.showMiniPlayer() }
Комментарии:
1. Спасибо!!!!!!