我正在使用MVVM体系结构,并将XML文本视图数据绑定到与该片段关联的视图模型。视图模型包含一个AllTimeStats对象(该模型),并具有AllTimeStats实例中每个变量的吸气剂,以便可以将其绑定到XML。如果我为每个textview的视图模型中放置一个吸气剂,一切都将正常工作。 XML最终看起来像:
android:text="@{allTimeBestViewModel.allTimeDuration}"
其中,getAllTimeDuration()是ViewModel中的方法。但是,我希望在视图模型中不要有大量的吸气剂,而要简单地使用方法getAllTimeStats()。然后在XML中,我可以做类似的事情:
android:text="@{allTimeBestViewModel.allTimeStats.allTimeDuration}"
因此直接访问模型(或者这是否违反MVVM?)。问题在于AllTimeStats是Stats的子类-在XML中,我只能绑定到AllTimeStats中的变量,也不能绑定到Stats中。这很奇怪,因为Stats中的所有变量也向AllTimeStats开放... 我的问题是: 为什么我也不能访问父类的getter方法?
ViewModel:(我想在这里删除所有的吸气剂,只是拥有一个getAllTimeStats()方法)
public class AllTimeBestViewModel extends AndroidViewModel {
private AllTimeStats allTimeStats;
public AllTimeBestViewModel(@NonNull Application application) {
super(application);
allTimeStats = AllTimeStats.getAllTimeStatsFromDatabase(application);
}
public String getAllTimeDuration() {
return allTimeStats.getAllTimeDurationFormatted();
}
public String getAllTimeDistance() {
return allTimeStats.getAllTimeDistanceFormatted();
}
public String getAllTimeAltitudeGain() {
return allTimeStats.getAllTimeAltitudeGainFormatted();
}
...
AllTimeStats (从XML中,我只能访问下面的三个变量)
public class AllTimeStats extends Stats {
private int allTimeDuration;
private int allTimeDistance;
private int allTimeAltitudeGain;
public int getAllTimeDuration() {
return allTimeDuration;
}
...
统计信息(allTimeStats的抽象超类)
abstract class Stats {
/*milliseconds*/
long durationTotal;
long durationAscent;
long durationDescent;
/*meters*/
int distanceTotal;
int distanceAscent;
int distanceDescent;
public long getDurationTotal() {
return durationTotal;
}
public long getDurationAscent() {
return durationAscent;
}
...