使用 NumberPicker 进行数据绑定
Databinding with NumberPicker
我遇到了一个问题,因为我想绑定一个numberPicker。
但是我在任何地方都找不到任何例子,而且像往常一样,它在第一次尝试时不起作用......在一打之后也没有:)。
所以我想质疑你的知识。
所以这基本上是我在 Xml 中所做的:
(我的代码开始)
<data>
<variable
name="profilmvvm"
type="com.example.dupla.sparktennis.viewmodels.ProfilViewModel"/>
<import type="com.example.dupla.sparktennis.Services.ConversiontoInt"/>
</data>
在同一个文件中,这里有点令人沮丧:
<NumberPicker
android:layout_width="50.0dp"
android:layout_height="100.0dp"
android:id="@+id/numberPickerNiveauProfil"
android:gravity="center_horizontal"
android:layout_marginLeft="10.0dp"
android:layout_marginTop="40.3dp"
android:layout_marginRight="10.0dp"
android:layout_marginBottom="10.0dp"
android:value="@{profilmvvm.niveau.niveau}"/>
这是我在片段 activity 中对其进行数据绑定的方式:
profilViewModel = new ProfilViewModel(getContext(), calendrier, rencontre, niveau, userLog, personne);
mBinding.setProfilmvvm(profilViewModel);
这是 ViewModel :
public ProfilViewModel(Context context, CalendrierDisponibilite cal, TypeDeRencontre renc, Niveau niv, Userslogs user, Personne pers) {
this.context = context;
this.calendrier = cal;
this.niveau = niv;
this.user = user;
this.personne = pers;
this.rencontre = renc;
}
@Bindable
public CalendrierDisponibilite getCalendrier() {
return calendrier;
}
public void setCalendrier(CalendrierDisponibilite calendrier) {
this.calendrier = calendrier;
notifyPropertyChanged(BR.calendrier);
}
@Bindable
public TypeDeRencontre getRencontre() {
return rencontre;
}
public void setRencontre(TypeDeRencontre rencontre) {
this.rencontre = rencontre;
notifyPropertyChanged(BR.rencontre);
}
@Bindable
public Personne getPersonne() {
return personne;
}
public void setPersonne(Personne personne) {
this.personne = personne;
notifyPropertyChanged(BR.personne);
}
@Bindable
public Niveau getNiveau() {
return niveau;
}
public void setNiveau(Niveau niveau) {
this.niveau = niveau;
notifyPropertyChanged(BR.niveau);
}
@Bindable
public Userslogs getUser() {
return user;
}
public void setUser(Userslogs user) {
this.user = user;
notifyPropertyChanged(BR.user);
}
我 100% 确定我的视图模型中有数据。
我只是不确定为什么它适用于所有其他正常工作的小部件(我有很多 EditText 和 CheckBox)。
所以我有没有做错什么?是否可以对 NumberPicker 进行数据绑定?
感谢您的全面分享:)
要么使用
@Bindable
public int getValue() {
return niveau.niveau;
}
或通过@BindingAdapter设置
我在为我的数据 class 中的参数设置 Number Picker 2way 数据绑定时遇到了类似的问题。
这是适合我的解决方案:
在我的视图模型中(间隔是一个以分钟为参数的数据class):
var interval = MutableLiveData(Interval(0,-1))
var minutes = ObservableInt(interval.value!!.minutes)
fun setMinutes(newValue:Int){
interval.value?.minutes = newValue
}
在xml
<NumberPicker
android:id="@+id/number_interval_minutes"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:layout_marginEnd="10dp"
android:timePickerMode="spinner"
android:value="@={intervalViewModel.minutes}"
android:onValueChange="@{(view, oldValue, newValue) -> intervalViewModel.setMinutes(newValue)}"
app:tooltipText="Minutes"
app:minValue="@{0}"
app:maxValue="@{59}"
app:textSize="@{80F}"
app:layout_constraintEnd_toStartOf="@+id/textView4"
app:layout_constraintTop_toBottomOf="@+id/text_input_layout_interval_title" />
enter code here
我遇到了一个问题,因为我想绑定一个numberPicker。 但是我在任何地方都找不到任何例子,而且像往常一样,它在第一次尝试时不起作用......在一打之后也没有:)。
所以我想质疑你的知识。
所以这基本上是我在 Xml 中所做的:
(我的代码开始)
<data>
<variable
name="profilmvvm"
type="com.example.dupla.sparktennis.viewmodels.ProfilViewModel"/>
<import type="com.example.dupla.sparktennis.Services.ConversiontoInt"/>
</data>
在同一个文件中,这里有点令人沮丧:
<NumberPicker
android:layout_width="50.0dp"
android:layout_height="100.0dp"
android:id="@+id/numberPickerNiveauProfil"
android:gravity="center_horizontal"
android:layout_marginLeft="10.0dp"
android:layout_marginTop="40.3dp"
android:layout_marginRight="10.0dp"
android:layout_marginBottom="10.0dp"
android:value="@{profilmvvm.niveau.niveau}"/>
这是我在片段 activity 中对其进行数据绑定的方式:
profilViewModel = new ProfilViewModel(getContext(), calendrier, rencontre, niveau, userLog, personne);
mBinding.setProfilmvvm(profilViewModel);
这是 ViewModel :
public ProfilViewModel(Context context, CalendrierDisponibilite cal, TypeDeRencontre renc, Niveau niv, Userslogs user, Personne pers) {
this.context = context;
this.calendrier = cal;
this.niveau = niv;
this.user = user;
this.personne = pers;
this.rencontre = renc;
}
@Bindable
public CalendrierDisponibilite getCalendrier() {
return calendrier;
}
public void setCalendrier(CalendrierDisponibilite calendrier) {
this.calendrier = calendrier;
notifyPropertyChanged(BR.calendrier);
}
@Bindable
public TypeDeRencontre getRencontre() {
return rencontre;
}
public void setRencontre(TypeDeRencontre rencontre) {
this.rencontre = rencontre;
notifyPropertyChanged(BR.rencontre);
}
@Bindable
public Personne getPersonne() {
return personne;
}
public void setPersonne(Personne personne) {
this.personne = personne;
notifyPropertyChanged(BR.personne);
}
@Bindable
public Niveau getNiveau() {
return niveau;
}
public void setNiveau(Niveau niveau) {
this.niveau = niveau;
notifyPropertyChanged(BR.niveau);
}
@Bindable
public Userslogs getUser() {
return user;
}
public void setUser(Userslogs user) {
this.user = user;
notifyPropertyChanged(BR.user);
}
我 100% 确定我的视图模型中有数据。 我只是不确定为什么它适用于所有其他正常工作的小部件(我有很多 EditText 和 CheckBox)。
所以我有没有做错什么?是否可以对 NumberPicker 进行数据绑定?
感谢您的全面分享:)
要么使用
@Bindable
public int getValue() {
return niveau.niveau;
}
或通过@BindingAdapter设置
我在为我的数据 class 中的参数设置 Number Picker 2way 数据绑定时遇到了类似的问题。 这是适合我的解决方案:
在我的视图模型中(间隔是一个以分钟为参数的数据class):
var interval = MutableLiveData(Interval(0,-1))
var minutes = ObservableInt(interval.value!!.minutes)
fun setMinutes(newValue:Int){
interval.value?.minutes = newValue
}
在xml
<NumberPicker
android:id="@+id/number_interval_minutes"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:layout_marginEnd="10dp"
android:timePickerMode="spinner"
android:value="@={intervalViewModel.minutes}"
android:onValueChange="@{(view, oldValue, newValue) -> intervalViewModel.setMinutes(newValue)}"
app:tooltipText="Minutes"
app:minValue="@{0}"
app:maxValue="@{59}"
app:textSize="@{80F}"
app:layout_constraintEnd_toStartOf="@+id/textView4"
app:layout_constraintTop_toBottomOf="@+id/text_input_layout_interval_title" />
enter code here