java - Android数据绑定(bind)双向不起作用

标签 java android pojo 2-way-object-databinding android-databinding

我正在尝试使用双向数据绑定(bind)来编辑用户数据。我能够在 View 中显示 POJO 内容,但用户所做的更改无法用 POJO 捕获。

public class MainActivity extends AppCompatActivity {

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

        binding  = DataBindingUtil.setContentView(this, R.layout.activity_main);

        User user = new User();
        user.setFirstName("first a");
        user.setLastName("last b");

        binding.setUser(user);
    }
    public void Click(View v){

        //ActivityMainBinding binding = ActivityMainBinding.inflate(getLayoutInflater());
        User user = binding.getUser();

        Toast.makeText(this,user.getFirstName(),Toast.LENGTH_LONG).show();
    }
}

我也尝试过为 userbinding 使用全局变量。但是当我点击按钮时,它总是显示“第一个”。 User.java 的定义是:

public class User extends BaseObservable{
    private String firstName;
    private String lastName;

    @Bindable
    public String getFirstName(){ return firstName;}
    public void setFirstName(String first) {
        firstName = first;
        notifyPropertyChanged(com.example.ks.myapplication.BR.firstName);
    }
    @Bindable
    public String getLastName(){ return lastName;}
    public void setLastName(String last) {
        lastName = last;
        notifyPropertyChanged(com.example.ks.myapplication.BR.lastName);
    }
}

和 XML:在这里,我试图在 TextView 和按钮单击时立即显示更改。

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
    <data>
        <variable name="user" type="com.example.ks.myapplication.User"/>
    </data>
    <LinearLayout
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <EditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/editText2"
            android:text="@{user.firstName}" />

        <EditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/editText"
            android:text="@{user.lastName}" />

        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="New Button"
            android:id="@+id/button"
            android:layout_gravity="center_horizontal"
            android:onClick="Click" />

        <TextView android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@{user.firstName}"/>

        <TextView android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@{user.lastName}"/>
    </LinearLayout>
</layout>

有什么我遗漏的吗?

最佳答案

双向数据绑定(bind)工具仍在实现中。
您已将项目升级到最新的 alpha 版本 (com.android.tools.build:gradle:2.1.0-alpha3) 并且必须使用 @={..} 类型表达式!!
查看详情:https://halfthought.wordpress.com/2016/03/23/2-way-data-binding-on-android/

关于java - Android数据绑定(bind)双向不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35889626/

相关文章:

java - 使用 sed 搜索并替换

java - 程序占用了我的所有资源并且未完成(可能是无限循环?)

android - 本地通知问题

Android DiffUtil.ItemCallback areContentsTheSame 不同ID

java - 我想为 jOOQ 生成的类添加注释

java - 如何像 Laravel 一样创建 HQL 查询?

java - 我发送 7 条消息抛出 GCM 并收到 35 条消息的响应

java - 我可以在 Android 上使用 jmonkeyengine 吗?

Android Studio 无法解析 Mockito 类

JavaFX、TableView 和 JPA