我的片段有两个入口点:一个没有传递 Bundle,第二个则传递带有参数的 Bundle。我注意到,一旦我向它传递了一个参数,该片段就会保留该参数,并且当我导航到该片段而不传递参数时,该参数仍然存在。
我尝试将参数设置为空:
barcode = NO_BARCODE
arguments?.let {
barcode = it.getString(SaleFragment.BARCODE, NO_BARCODE)
createNewDbItemDialog().show()
arguments = null
}
然而,这会产生不良的副作用,即该片段将不再接收任何参数,即使我使用参数导航到它:
findNavController(requireActivity(), R.id.nav_host_fragment)
.navigate(
R.id.products_fragment,
Bundle().apply { putString(BARCODE, barcode) },
NavOptions.Builder()
.setPopUpTo(R.id.sale_fragment, inclusive = false, saveState = true)
.setRestoreState(true)
.build()
)
不再收到条形码参数。仅第一次,之后参数设置为 null。
如何在片段中可靠地区分导航到片段时是否传递了参数?
删除特定参数:
arguments?.remove(SaleFragment.BARCODE)