2
我正嘗試使用雙向數據綁定來編輯用戶數據。我可以在視圖中顯示POJO內容,但用戶所做的更改無法使用POJO捕獲。Android數據綁定雙向不工作
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>
有什麼我失蹤?
你的POJO有'firstname'和'lastName'的private字段 - 你不應該使用'accessor'和'mutator'方法嗎?我以前從未使用過XML數據綁定,但如果您可以訪問私有字段,它看起來會很糟糕。 –
這是設計。資料來源:http://developer.android.com/tools/data-binding/guide.html –
如果你看,雖然它們是在示例鏈接中的「公共」變量,而不是你的POJO中的「private」變量?它解釋瞭如果使用'private'字段,你需要使用'accessor'方法。 –