Как найти дочерний фрагмент с компонентами архитектуры навигации - PullRequest
0 голосов
/ 25 октября 2018

Изучив основы новых компонентов архитектуры, я решил применить эти знания и создать демонстрационный проект.В этом проекте я работал с Google Map.

В моем фрагменте navHost один из фрагментов показывает карту Google таким образом

<fragment android:layout_width="match_parent" android:layout_height="match_parent"
          android:id="@+id/map"
          android:name="com.google.android.gms.maps.SupportMapFragment"></fragment>

из кода, который я пытался получить этот класс фрагмента, связанный код выглядит следующим образом

private val host: NavHostFragment? by lazyFast {
    activity?.supportFragmentManager
        ?.findFragmentById(R.id.my_nav_host_fragment) as NavHostFragment?
}

и в onCreateView я попробовал это

val mapFragment = host?.childFragmentManager?.findFragmentById(R.id.map) as SupportMapFragment
    mapFragment.getMapAsync(this)

Это выдало мне эту ошибку

Исключение времени выполнения: ненулевое значение не может быть приведено к нулю

Кто-нибудь знает, что я делаю не так?

1 Ответ

0 голосов
/ 25 октября 2018

эта ошибка не имеет ничего общего с компонентами навигации.например, host?.childFragmentManager?.findFragmentById(R.id.map) as SupportMapFragment действительно находит вложенный граф навигации.

Если вы просто хотите получить доступ к вашему дочернему фрагменту, это можно сделать, просто реорганизовав код таким образом

val mapFragment = this.childFragmentManager.findFragmentById(R.id.map) as SupportMapFragment

надеюсь, что это поможет

...