3

我正在尝试使用双向数据绑定来编辑用户数据。我能够在视图中显示 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();
    }
}

user我也尝试过使用全局变量binding。但是当我点击按钮时,它总是显示“第一个”。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>

有什么我想念的吗?

4

1 回答 1

0

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

于 2016-04-03T11:58:05.137 回答