我想將EditText
的值綁定到按鈕單擊上的POJO,但POJO爲空。以下是我寫的代碼: -無法使雙向數據綁定工作
MainActivity: -
public class MainActivity extends AppCompatActivity {
ActivityMainBinding binding;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
binding = DataBindingUtil.setContentView(this,R.layout.activity_main);
ButterKnife.bind(this);
}
@OnClick(R.id.button)
public void submit()
{
Log.d("myapplication",binding.getUser()); // NullPointerException
}
}
activity_main.xml中: -
<?xml version="1.0" encoding="utf-8"?>
<layout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<data>
<variable
name="user"
type="com.paragkadam.databindingsample.User"/>
</data>
<RelativeLayout
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.paragkadam.databindingsample.MainActivity">
<EditText
android:id="@+id/first_name_edittext"
android:layout_margin="10dp"
android:hint="First name"
android:text="@={user.firstName}"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<EditText
android:id="@+id/last_name_edittext"
android:layout_margin="10dp"
android:hint="Last name"
android:text="@={user.lastName}"
android:layout_below="@+id/first_name_edittext"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<Button
android:id="@+id/button"
android:layout_margin="10dp"
android:layout_below="@+id/last_name_edittext"
android:text="Submit"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</RelativeLayout>
</layout>
POJO類User.java: -
public class User {
private String firstName,lastName;
public User(){}
public User(String firstName, String lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
}
是的空指針異常在調用setUser()方法後消失。但我的問題是 - 數據綁定庫本身不應該設置用戶pojo的值,而不是明確地調用setUser()。我期望我的edittext的價值被附加到我的pojo用戶。 –
不,數據綁定不會自行設置值。你必須通過他們相應的setter方法來設置'data'標記內的所有變量值。一旦你通過'setUser()'方法傳遞'User'類的實例,它將被附加到edittext,並且你可以在'User'對象中獲得edittext的文本。 – CodeCameo
那麼這是否意味着我只需要設置pojo一次,並且edittext上的文本發生更改時,模型會自動設置更新的值? –