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> 

有什麼我失蹤?

+0

你的POJO有'firstname'和'lastName'的private字段 - 你不應該使用'accessor'和'mutator'方法嗎?我以前從未使用過XML數據綁定,但如果您可以訪問私有字段,它看起來會很糟糕。 –

+0

這是設計。資料來源:http://developer.android.com/tools/data-binding/guide.html –

+0

如果你看,雖然它們是在示例鏈接中的「公共」變量,而不是你的POJO中的「private」變量?它解釋瞭如果使用'private'字段,你需要使用'accessor'方法。 –

回答