我正在尝试使用双向数据绑定(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();
}
}
我也尝试过为 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:在这里,我试图在 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/