繁体   English   中英

Android数据绑定双向不起作用

[英]Android data binding two-way not working

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

有什么我想念的吗?

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM