问答详情
源自:2-2 Data Binding基础用法

监听器绑定如何实现onTextChange

监听器绑定中TextView实现的onClickListenerBingding中的数据是Activity传给了XML后通过方法传回了Activity 并Toast显示,这个Toast显示的数据是已知的并且是固定的,如果我想用监听器绑定实现onTextChange,该如何获取到EditText中的数据并传递给Activity并Toast显示呢?

提问者:慕粉1469012311 2017-08-09 22:29

个回答

  • 慕粉1469012311
    2017-08-15 19:25:03

    额,其实我是想问如何实现:

    <EditText

                android:onTextChanged="@{() -> person.onTextChanged(这里面不知道怎么实现)}"

                android:layout_width="match_parent"

                android:layout_height="wrap_content" />


  • qq_NewBranSTONE_0
    2017-08-13 14:42:15

    不知道我写的代码对不对你的问题。

    我的理解是:

    在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>