Android绑定库

时间:2015-11-15 15:23:00

标签: android binding

我正在使用Android Binding Lib,经过几个小时的故障排除我开始放弃,也许有人可以帮我弄清楚我在这里做错了什么。

这一切都编译好,自动生成的类被创建,我可以运行应用程序,但是绑定的字段似乎不会在视图模型中获取他们所尊重的值。

我已更新Gradle:

classpath 'com.android.tools.build:gradle:1.5.0-beta2'

并补充说:

    dataBinding {
    enabled = true
}

在我的活动中,我添加了布局元素:

<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<data>
    <import type="android.view.View"/>
    <variable
        name="vm"
        type="com.client.SiteActivityViewModel" />
</data>
<RelativeLayout
    android:id="@+id/footer"
    android:layout_width="match_parent"
    android:layout_height="50dp"
    android:layout_alignParentBottom="true"
    android:background="@color/app_bg"
    android:gravity="center"
    android:paddingBottom="10dp"
    android:visibility="@{vm.isOnShift ? View.VISIBLE : View.GONE}">
    <EditText
        android:padding="4dp"
        android:id="@+id/newEventBodyField"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:hint="@{vm.testText2}"
        android:textSize="14sp"
        android:textColorHint="@color/app_textColor"
        android:textColor="@color/app_textColorEmpasise"
        android:background="@android:color/white"/>
</RelativeLayout>
</layout>

我设置了我的VM:

package com.client;
public class SiteActivityViewModel extends BaseObservable {
private boolean isOnShift = false;

public final String testText2 = "ballalalal";

@Bindable
public boolean getIsOnShift(){
    return isOnShift;
}
public void setIsOnShift(boolean value){
    isOnShift = value;
    notifyPropertyChanged(com.client.BR.isOnShift);
}
}

最后,我将视图连接到VM:

package com.client;

public class SiteActivity extends Activity {
private SiteActivityViewModel vm;
private ActivitySiteBinding binding;

@Override
protected void onCreate(Bundle savedInstanceState) {

    binding = DataBindingUtil.setContentView(this, R.layout.activity_site);
    vm = new SiteActivityViewModel();
    binding.setVm(vm);

    vm.setSiteId(siteId);




    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_site);

    .....
   }

1 个答案:

答案 0 :(得分:1)

嗯,我想我只需要将其分解并稍稍离开它。事实证明我发现了这个问题。

我会在这里发帖,以防其他人遇到同样的问题。

问题在于活动中的呼叫顺序。我首先要调用超类onCreate方法并在使用绑定之前设置视图:

@Override
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_site);

    binding = DataBindingUtil.setContentView(this, R.layout.activity_site);
    vm = new SiteActivityViewModel();
    binding.setVm(vm);

    vm.setSiteId(siteId);

    .....
}