【问题标题】:Cant assign value to livedata in viewmodel from onDateSet method无法通过 onDateSet 方法为 viewmodel 中的 livedata 赋值
【发布时间】:2020-10-11 08:07:47
【问题描述】:

我无法更新 dateTxt 和 timeTxt 的值,它始终为空。我尝试从片段中调用 setDate 并且它有效。并且生效日期 Mutablelive 数据保持为空。当我从 onDateset 调用函数时,它实际上进入了 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,month,day)
    }

    override fun onDateSet(view: DatePicker?, year: Int, month: Int, dayOfMonth: Int) {

        viewmodel.setDate(year,month,dayOfMonth,null,null)

    }


}

【问题讨论】:

  • 代码对我来说似乎很好。尝试调试 #setDate() 。此外,如果您正在检查 OrderViewModel 与其他组件,则可能有两个不同的 OrderViewModel 实例。
  • 谢谢,我实际上创建了两个实例

标签: android mvvm datepicker viewmodel android-livedata


【解决方案1】:

已解决

我实际上创建了两个视图模型实例,以解决我使用共享视图模型的问题,例如

private val viewmodel:OrderViewModel by activityViewModels() 

【讨论】:

    猜你喜欢
    • 2020-03-23
    • 2020-03-17
    • 1970-01-01
    • 2020-07-24
    • 2021-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-15
    相关资源
    最近更新 更多