Android XML数据绑定不适用于继承

时间:2018-06-21 17:00:23

标签: android mvvm android-view android-databinding android-viewmodel

我正在使用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;
    }

...

0 个答案:

没有答案