gpt4 book ai didi

安卓绑定(bind)库

转载 作者:行者123 更新时间:2023-11-30 01:46:00 24 4
gpt4 key购买 nike

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

所有编译都很好,创建了自动生成的类,我可以运行该应用程序,但是绑定(bind)字段似乎没有在 View 模型中获取它们受尊重的值。

我已经更新了 Gradle:

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

并添加:

    dataBinding {
enabled = true
}

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

<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>

我设置了我的虚拟机:

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

最后我将 View 连接到 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);

.....
}

最佳答案

好吧,我想我只需要将它分解并稍微远离它。结果我发现了问题。

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

问题在于 Activity 中的调用顺序。在使用绑定(bind)之前,我首先必须调用父类(super class) onCreate 方法并设置 View :

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

.....
}

关于安卓绑定(bind)库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33721358/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com