我正在学习mvvm。我想在视图模型中传递片段绑定参数。我正在使用Hilt-Dagger。请帮助我。每次保存的状态句柄都是空的。
这是我代码。2第一个片段:
@AndroidEntryPoint
class CustomerOrderSubmit : Fragment() {
private lateinit var binding: FragmentCustomerOrderSubmitBinding
val customerViewModel: CustomerViewModel by viewModels()
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
// Inflate the layout for this fragment
binding = FragmentCustomerOrderSubmitBinding.inflate(inflater, container, false)
binding.customerModel = customerViewModel
binding.lifecycleOwner = viewLifecycleOwner
customerViewModel.btnClick.observe(viewLifecycleOwner) {
when (it) {
true -> {
val args = Bundle()
args.putParcelable("customer",customerViewModel.args.value)
val orderReview = OrderReview()
orderReview.arguments = args
Log.d("PARC",args.toString())
val fragmentManager = requireActivity().supportFragmentManager.beginTransaction()
fragmentManager.replace(R.id.main_frame_layout,orderReview)
.addToBackStack(null).commit()
}
else -> {}
}
}
第二个片段:我在这里获得了捆绑包值。但我希望它在ViewModel中
@AndroidEntryPoint
class OrderReview : Fragment() {
private lateinit var binding: FragmentOrderReviewBinding
private val customerViewModel: CustomerViewModel by viewModels()
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
// Inflate the layout for this fragment
binding = FragmentOrderReviewBinding.inflate(inflater, container, false)
binding.argsModel = customerViewModel
binding.lifecycleOwner = viewLifecycleOwner
val args : CustomerModel? = arguments?.getParcelable("customer")
Log.d("PARCF",args.toString())
return binding.root
}
}
VIEW MODEL:但getArgs.值始终为空。
@HiltViewModel
class CustomerViewModel @Inject constructor(
private val cusomerRepository: CusomerRepository,
private val savedStateHandle: SavedStateHandle
) : ViewModel() {
val customerList: LiveData<List<CustomerModel>>
//get arguments
val getArgs = MutableLiveData<CustomerModel>(savedStateHandle["customer"])
我正在从片段1到片段2获取Bundle数据,但无法从片段1到ViewmodelSavedstatehandle获取相同的数据,但每次都为空。我做错了什么?我需要ViewModel中的数据。
请帮助我是一个新的学习者在MVVM。
1条答案
按热度按时间hfyxw5xn1#
我不认为你可以通过这种方式从fragment向ViewModel传递数据。通过访问需要的方法来传递这个bundle数据。
视图模型方法
片段
您可以从onCreateView或onViewCreated将数据发送到视图模型