我有一个DialogFragment
。 NavController库不支持DialogFragment
,它仅支持全屏片段。
我将DialogFragment
与show(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
。
答案 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)