Могу ли я всегда использовать findNavController (mView), чтобы найти NavController в Android Studio 3.5.2 - PullRequest
0 голосов
/ 10 ноября 2019

Следующий пример кода CameraFragment.kt и activity_main.xml взят из Camera-samples проекта.

Он находит NavController, используя findNavController(requireActivity(), R.id.fragment_container).

Я думаю, что это сложно, могу ли я всегда использовать findNavController(mView), чтобы найти NavController? просто как код A?

CameraFragment.kt

private fun updateCameraUi() {    
       ...          
       Navigation.findNavController(requireActivity(), R.id.fragment_container).navigate(
              CameraFragmentDirections.actionCameraToGallery(outputDirectory.absolutePath))

}

activity_main.xml

<FrameLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:keepScreenOn="true"
    tools:context=".MainActivity">

    <fragment
        android:id="@+id/fragment_container"
        android:name="androidx.navigation.fragment.NavHostFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:defaultNavHost="true"
        app:navGraph="@navigation/nav_graph" />

</FrameLayout>

Код A

private lateinit var mView: View 

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
   super.onViewCreated(view, savedInstanceState)
   mView=view
   ...
}


Navigation.findNavController(mView).navigate(
           CameraFragmentDirections.actionCameraToGallery(outputDirectory.absolutePath))

1 Ответ

1 голос
/ 10 ноября 2019

Вам даже не нужно использовать Navigation.findNavController(mView) во фрагменте - вы можете использовать NavHostFragment.findNavController(this), чтобы найти NavHostFragment из фрагмента согласно . Перейдите к целевой документации .

Но да, вы также можете использовать Navigation.findNavController(mView) или любой вид из фрагмента.

Вы можете использовать findNavController(requireActivity(), R.id.fragment_container), только если у вас есть только действие. Хотя это работает, есть более простые способы сделать то же самое.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...