Android 无法使双向数据绑定正常工作
我想在单击按钮时将Android 无法使双向数据绑定正常工作,android,data-binding,Android,Data Binding,我想在单击按钮时将EditTexts的值绑定到POJO,但POJO为空。以下是我编写的代码:- 主要活动:- public class MainActivity extends AppCompatActivity { ActivityMainBinding binding; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanc
EditText
s的值绑定到POJO,但POJO为空。以下是我编写的代码:-
主要活动:-
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>
我认为您得到的是NullPointerException,因为您没有设置用户值
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
binding = DataBindingUtil.setContentView(this,R.layout.activity_main);
binding.setUser(new User("FirstName","LastName"));
}
我认为您得到的是NullPointerException,因为您没有设置用户值
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
binding = DataBindingUtil.setContentView(this,R.layout.activity_main);
binding.setUser(new User("FirstName","LastName"));
}
第一个双向数据绑定不需要事件,只要@={}将在视图上执行的每个事件上设置变量 其次,您编写以在数据绑定中显示的每个变量都需要设置else check以进行NULL检查 在oncreate方法上未调用binding.setuser时,它将为null,binding将调用 User.name在文本视图中设置它,这将最终导致空指针 还可以查看绑定文档 他们已经定了 @可绑定到变量
以及更改的通知属性第一个双向数据绑定不需要事件,只需@={}将在视图上执行的每个事件上设置变量 其次,您编写以在数据绑定中显示的每个变量都需要设置else check以进行NULL检查 在oncreate方法上未调用binding.setuser时,它将为null,binding将调用 User.name在文本视图中设置它,这将最终导致空指针 还可以查看绑定文档 他们已经定了 @可绑定到变量
除了通知的属性已更改外Yes在调用setUser()方法后,空指针异常将消失。但我的问题是——数据绑定库本身不应该设置用户pojo的值,而不是显式调用setUser()。我希望EditText的值附加到pojo用户。不,数据绑定本身不会设置值。您必须通过相应的setter方法自行设置
data
标记中的所有变量值。通过setUser()
方法传递User
类的实例后,它将附加到edittext,您可以在该User
对象中获取edittext的文本。这是否意味着我只需设置一次pojo,并且当edittext上的文本发生更改时,模型自动设置为更新值?是,调用setUser()方法后,空指针异常消失。但我的问题是——数据绑定库本身不应该设置用户pojo的值,而不是显式调用setUser()。我希望EditText的值附加到pojo用户。不,数据绑定本身不会设置值。您必须通过相应的setter方法自行设置data
标记中的所有变量值。通过setUser()
方法传递User
类的实例后,它将附加到edittext,您可以在该User
对象中获取edittext的文本。这是否意味着我只需设置一次pojo,并且当edittext上的文本发生更改时,是否使用更新的值自动设置模型?