Je ne peux pas mettre à jour la valeur de dateTxt et timeTxt, elle est toujours nulle. J'ai essayé d'appeler setDate à partir d'un fragment et cela fonctionne. Et la date de valeur des données Mutablelive reste nulle. Lorsque j'appelle la fonction depuis onDateset, elle entre en fait dans viewModel et la valeur ne se met jamais à jour.

Ma vueModèle

 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()

                }
            }
        }
    }
}

Date PickerDailog

@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)

    }


}
0
fayis t 11 oct. 2020 à 11:07

1 réponse

Meilleure réponse

Résolue

J'ai en fait créé deux instances de viewmodel, pour corriger le fait que j'ai utilisé viewModel partagé, comme

private val viewmodel:OrderViewModel by activityViewModels() 
1
fayis t 11 oct. 2020 à 11:56