Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/212.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android绑定库_Android_Binding - Fatal编程技术网

Android绑定库

Android绑定库,android,binding,Android,Binding,我正在使用Android绑定库,经过几个小时的故障排除,我开始放弃,也许有人能帮我找出我在这里做错了什么 所有的编译都很好,自动生成的类都被创建了,我可以运行这个应用程序,但是绑定的字段在视图模型中似乎没有得到它们所尊重的值 我已经更新了Gradle: classpath 'com.android.tools.build:gradle:1.5.0-beta2' 并补充说: dataBinding { enabled = true } 在我的活动中,我添加了布局元素: <

我正在使用Android绑定库,经过几个小时的故障排除,我开始放弃,也许有人能帮我找出我在这里做错了什么

所有的编译都很好,自动生成的类都被创建了,我可以运行这个应用程序,但是绑定的字段在视图模型中似乎没有得到它们所尊重的值

我已经更新了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 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);

    .....
   }

嗯,我想我只是需要把它分解一下,然后稍微远离它。结果我发现了问题所在

我将把这个贴在这里,以防其他人遇到同样的问题

问题在于活动中调用的顺序。在使用绑定之前,我首先必须调用超级类onCreate methode并设置视图:

@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);

    .....
}

当我这么做的时候,我还应该注意到,遵循官方文件()对我来说是行不通的。当我尝试使用1.5.0-alpha1时,医生建议它不起作用。环顾网络,我发现其他人在使用gradle:1.5.0-beta2,这很有效。最后,如果你环顾四周,你会发现许多博客文章使用了gradle的早期版本,并对gradle进行了一些其他修改。只要您使用1.5.0-beta2(或更高版本),就不再需要这些
@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);

    .....
}