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'方法。 –

回答