将数据从底部 Sheet 对话框片段传递到片段
Pass data from Bottom Sheet Dialog Fragment to Fragment
我正在使用带有导航架构组件的 BottomSheetDialogFragment class。我遵循单一 activity 模式,因此我只有一个 activity 和几个片段。下面是我的代码。
BottomSheetDialogFragment.kt
class LogoBottomSheetFragment : BottomSheetDialogFragment() {
private var _binding: FragmentBottomSheetAccountLogoBinding? = null
private val binding get() = _binding!!
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
_binding = FragmentBottomSheetAccountLogoBinding.inflate(inflater, container, false)
return binding.root
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
}
这就是我从主要片段 navigation.xml 打开对话框的方式:
<dialog
android:id="@+id/logoBottomSheetFragment"
android:name="com.th3pl4gu3.locky.ui.main.add.account.LogoBottomSheetFragment"
android:label="LogoBottomSheetFragment"
tools:layout="@layout/fragment_bottom_sheet_account_logo" />
现在我想将数据从底部 sheet 传递到主片段。
有没有正确的方法来做到这一点?谁能帮帮我。
谢谢。
从 Navigation 2.3.0-alpha02
, Navigation has built in support for Returning a result 到以前的目的地。
这分为两部分,您的第一个片段(想要接收结果的片段)将使用 navController.currentBackStackEntry?.savedStateHandle
来获取对与其 NavBackStackEntry
关联的 SavedStateHandle
的引用导航控制器。然后,它可以 observe
一个特定的键,以便在该键更改时获得回调。
第二个片段(提供结果的片段,即您的 LogoBottomSheetFragment
)将通过使用 navController.previousBackStackEntry?.savedStateHandle
获得对完全相同的 SavedStateHandle
的引用。当第二个片段在 SavedStateHandle
上调用 set
时,该结果将可用于第一个片段。
请注意,有一些 DialogFragment specific considerations 需要记住 - 因为前一个片段是 RESUMED
,即使显示 BottomSheetFragment
,结果也会立即发送到您的第一个片段。
我正在使用带有导航架构组件的 BottomSheetDialogFragment class。我遵循单一 activity 模式,因此我只有一个 activity 和几个片段。下面是我的代码。
BottomSheetDialogFragment.kt
class LogoBottomSheetFragment : BottomSheetDialogFragment() {
private var _binding: FragmentBottomSheetAccountLogoBinding? = null
private val binding get() = _binding!!
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
_binding = FragmentBottomSheetAccountLogoBinding.inflate(inflater, container, false)
return binding.root
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
}
这就是我从主要片段 navigation.xml 打开对话框的方式:
<dialog
android:id="@+id/logoBottomSheetFragment"
android:name="com.th3pl4gu3.locky.ui.main.add.account.LogoBottomSheetFragment"
android:label="LogoBottomSheetFragment"
tools:layout="@layout/fragment_bottom_sheet_account_logo" />
现在我想将数据从底部 sheet 传递到主片段。
有没有正确的方法来做到这一点?谁能帮帮我。
谢谢。
从 Navigation 2.3.0-alpha02
, Navigation has built in support for Returning a result 到以前的目的地。
这分为两部分,您的第一个片段(想要接收结果的片段)将使用 navController.currentBackStackEntry?.savedStateHandle
来获取对与其 NavBackStackEntry
关联的 SavedStateHandle
的引用导航控制器。然后,它可以 observe
一个特定的键,以便在该键更改时获得回调。
第二个片段(提供结果的片段,即您的 LogoBottomSheetFragment
)将通过使用 navController.previousBackStackEntry?.savedStateHandle
获得对完全相同的 SavedStateHandle
的引用。当第二个片段在 SavedStateHandle
上调用 set
时,该结果将可用于第一个片段。
请注意,有一些 DialogFragment specific considerations 需要记住 - 因为前一个片段是 RESUMED
,即使显示 BottomSheetFragment
,结果也会立即发送到您的第一个片段。