Android数据绑定双向不起作用

时间:2016-03-09 10:57:45

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

我正在尝试使用双向数据绑定来编辑用户数据。我能够在视图中显示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:在这里,我试图在文本视图和按钮点击中立即显示更改。

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

我有什么遗失的吗?

1 个答案:

答案 0 :(得分:0)

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