监听器绑定中TextView实现的onClickListenerBingding中的数据是Activity传给了XML后通过方法传回了Activity 并Toast显示,这个Toast显示的数据是已知的并且是固定的,如果我想用监听器绑定实现onTextChange,该如何获取到EditText中的数据并传递给Activity并Toast显示呢?
额,其实我是想问如何实现:
<EditText
android:onTextChanged="@{() -> person.onTextChanged(这里面不知道怎么实现)}"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
不知道我写的代码对不对你的问题。
我的理解是:
在EditText上绑定一个onTextChange事件,每当EditText中输入的内容改变了,使用Toast显示出来。
下面贴上我的代码
// MainActivity.java public class MainActivity extends AppCompatActivity { private ActivityMainBinding mBinding; private User mUser; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // setContentView(R.layout.activity_main); mBinding = DataBindingUtil.setContentView(this, R.layout.activity_main); mUser = new User("Oz", "Young"); mBinding.setUser(mUser); mBinding.setPerson(new Person()); } public class Person { public void onClick(User user) { Toast.makeText(MainActivity.this, user.getFirstName(), Toast.LENGTH_SHORT).show(); } public void onTextChanged(CharSequence s, int start, int before, int count) { mUser.setFirstName(s.toString()); mBinding.setUser(mUser); // s 就是EditText中输入的值 // 使用Toast打印 Toast.makeText(MainActivity.this, s.toString(), Toast.LENGTH_SHORT).show(); } } }
<?xml version="1.0" encoding="utf-8"?> <layout xmlns:android="http://schemas.android.com/apk/res/android"> <data> <variable name="user" type="com.android.oz.databindingdemo.User" /> <!--记得这里需要将Person传递进来--> <variable name="person" type="com.android.oz.databindingdemo.MainActivity.Person" /> </data> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <!-- 绑定onTextChanged --> <!-- 这里使用::是为了与.区分开,使用::能清楚的知道是调用方法 --> <EditText android:onTextChanged="@{person::onTextChanged}" android:layout_width="match_parent" android:layout_height="wrap_content" /> <TextView android:onClick="@{() -> person.onClick(user)}" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="@{user.firstName}" /> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="@{user.lastName}" /> </LinearLayout> </layout>