特定的Android设备上会发生数据绑定错误

时间:2017-04-20 10:36:11

标签: android data-binding

问题

在我的活动中,有两种观点: A B 。我使用数据绑定来控制其可见性。

查看A
android:visibility="@{model.attr==1?View.GONE:View.VISIBLE}”

查看B

android:visibility="@{model.attr!=1?View.VISIBLE:View.GONE}”

然后,我打包了发布 Apk,在 JinLi QiKu Android设备上运行,但发现两个视图的可见性相反:A是不可见的,B是可见的。是的,不要惊讶,A和B逻辑是一样的。

提示

不要太早得出结论我在使用数据绑定时犯了一些错误。让我解释一下更多细节:

  • 问题只发生在上述两个Android设备上。

  • 当我打包调试版本(例如, debug.apk )时,问题就会消失。

  • 当我用B1更改B的可见性声明代码时 android:visibility="@{model.attr==1?View.GONE:View.VISIBLE}”,问题也消失了。

简而言之

  • JinLi QiKu 出错,其他人工作正常。

  • release.apk 出错, debug.apk 工作正常。

  • android:visibility="@{model.attr!=1?View.VISIBLE:View.GONE}”出错,android:visibility="@{model.attr==1?View.GONE:View.VISIBLE}”工作正常。

问题太奇怪了,我已经试过几天了。有没有人遇到过这样的问题?任何建议将不胜感激。

1 个答案:

答案 0 :(得分:2)

所有值都应设置并仅获取By Java Class,最好只在xml中验证

XML文件:

<RelativeLayout
            xmlns:android="http://schemas.android.com/apk/res/android"
            android:id="@+id/relativelayout"
            android:layout_width="@dimen/rides_relative_size"
            android:layout_height="@dimen/rides_relative_size"
            android:layout_gravity="center"
            android:visibility="@{emptyCheck.isIsemptyview? View.VISIBLE: View.GONE}">
        </RelativeLayout>

在Java类中设置和获取值:

public class EmptyView extends BaseObservable {

    /**
     * The isEmptyView list check if it true or false by using get Ride Offered list
     */
    boolean isemptyview = false;

    /**
     * Gets {@see #isemptyview}.
     *
     * @return {@link #isemptyview}
     */
    @Bindable
    public boolean isIsemptyview() {
        return isemptyview;
    }

    /**
     * Sets {@see #isemptyview}
     *
     * @param isemptyview (@link #isemptyview}
     */
    public void setIsemptyview(boolean isemptyview) {
        this.isemptyview = isemptyview;
        notifyPropertyChanged(BR.isemptyview);
    }
}

注意:某些设备在条件检查时不接受xml中的直接值