使用NavController

时间:2018-12-07 08:33:28

标签: android

我有一个DialogFragment。 NavController库不支持DialogFragment,它仅支持全屏片段。

我将DialogFragmentshow(fragmentManager,"")一起使用,效果很好,但是在DialogFragment内部,我无法获得“ Navigation”实例。 (也许是因为它并非以NavController开头)

override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
    super.onCreateDialog(savedInstanceState)
    dialogView = LayoutInflater.from(context).inflate(R.layout.fragment_dialog, null)
    viewModel = BaseViewModel.create(this)


    return AlertDialog.Builder(context)
            .setView(dialogView)
            .create()
}

我尝试过(在onCreateDialog,onActivityCreated中)

Navigation.findNavController(view)
Navigation.findNavController(customView)
Navigation.findNavController(activity, R.id.thisFragmentId)

是否可以选择用NavController加载新片段? 如果是否没有其他替代解决方案?我之所以喜欢它,是因为我可以在ViewModel中使用DialogFragment

2 个答案:

答案 0 :(得分:0)

我找到了答案。但我正在寻找更好的解决方案。

val args = DirectionFragmentArgs.Builder()
       .setId(id)
       .build()
       .toBundle()

(activity as SingleActivity).navigation.navigate(R.id.directionFragmentId, args)
dismiss()

答案 1 :(得分:0)

一些更新:

NavController库2.0及更高版本支持DialogFragment目标。

例如:

<dialog
        android:id="@+id/dialogFragmentScreen"
        android:name="com.x.y.DialogFragmentScreen"
        android:label="fragment_dialog"
        tools:layout="@layout/fragment_dialog" >
    <action
            android:id="@+id/action_dialogFragmentScreen_to_mainFragment"
            app:destination="@id/mainFragment"
            app:popUpTo="@id/mainFragment" />
</dialog>

访问NavController:

findNavController(parentFragment !!。view !!)

示例:

findNavController(parentFragment !!。view !!)。navigate(R.id.action_dialogFragmentScreen_to_mainFragment)