如何解决无法从onDateSet方法向viewmodel中的livedata分配值
我无法更新dateTxt和timeTxt的值,它始终为null。我试图从一个片段调用setDate,它的工作原理。并且值日期Mutablelive数据保持为空。当我从onDateset调用函数时,它实际上位于viewModel中,并且值永不更新。
我的viewModel
class OrderViewModel @ViewModelInject constructor(
private val networkHelper: NetworkHelper,private val firebaseRepository: FirebaseRepository
) : ViewModel(){
val date:MutableLiveData<Date> = MutableLiveData()
val dateTxt:MutableLiveData<String> = MutableLiveData()
val timeTxt:MutableLiveData<String> = MutableLiveData("Set Time")
fun setDate(year:Int?,month:Int?,day:Int?,hour:Int?,minute:Int?){
viewModelScope.launch {
if (networkHelper.isNetworkConnected()){
date.value = Date(year,month,day,hour,minute)
if(year!=null && month!=null && day!=null){
val c = Calendar.getInstance()
c.set(Calendar.YEAR,year)
c.set(Calendar.MONTH,month)
c.set(Calendar.DAY_OF_MONTH,day)
val dateString= DateFormat.getDateInstance(DateFormat.FULL).format(c.time).toString()
dateTxt.value = dateString
}
if (hour!=null && minute!=null){
val c = Calendar.getInstance()
c.set(Calendar.HOUR,hour)
c.set(Calendar.MINUTE,minute)
timeTxt.value = DateFormat.getDateInstance(DateFormat.SHORT).format(c.time).toString()
}
}
}
}
}
DatePickerDailog
@AndroidEntryPoint
class DatePickerDialog :DialogFragment(),DatePickerDialog.OnDateSetListener{
private val viewmodel:OrderViewModel by viewModels()
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
val c = Calendar.getInstance()
val year = c.get(Calendar.YEAR)
val month = c.get(Calendar.MONTH)
val day = c.get(Calendar.DAY_OF_MONTH)
return DatePickerDialog(requireContext(),this,year,day)
}
override fun onDateSet(view: DatePicker?,year: Int,month: Int,dayOfMonth: Int) {
viewmodel.setDate(year,dayOfMonth,null,null)
}
}
解决方法
已解决
我实际上创建了两个viewmodel实例,以解决我使用共享viewModel的问题,例如
private val viewmodel:OrderViewModel by activityViewModels()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。