美文网首页安卓数据绑定(dataBinding)从0到学会使用
Android6.0之强大的DataBinding(数据绑定)-

Android6.0之强大的DataBinding(数据绑定)-

作者: it奔跑在路上 | 来源:发表于2017-03-13 22:37 被阅读323次
1.本次是主题是利用两个edittext,实时判断只有当两个edittext内容一致且长度为6-16位时,button才可以进行点击。
2.想一个demo不容易啊,半天才挤出来一个。因为不能直接用项目的,暂时只能用初级的代码来演示了,高深的代码暂时还没想到怎么演示出来,正在想,别急。。。

第一步:老规矩,布局

<?xml version="1.0" encoding="utf-8"?>
<layout
    xmlns:android="http://schemas.android.com/apk/res/android">

    <data>
        <variable
            name="info"
            type="com.zhangyapeng.www.databindingdemo.MainVM"/>
    </data>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">

        <EditText
            android:id="@+id/pwd"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="请输入密码"
            android:inputType="textPassword"
            android:maxLength="16"/>

        <EditText
            android:id="@+id/pwd_affirm"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="请再次输入密码"
            android:inputType="textPassword"
            android:maxLength="16"/>

        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="vertical">

            <TextView
                android:id="@+id/pwd_confulict"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="两次密码不一致"
                android:visibility="invisible"/>
        </LinearLayout>

        <Button
            android:id="@+id/bt"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:background="@drawable/bg"
            android:onClick="@{info.click}"
            android:enabled="false"
            android:text="是否可以点击"/>

    </LinearLayout>
</layout>

写完了,写MainVM类的内容

public class MainVM {
    private Context             context;
    private ActivityMainBinding binding;

    public MainVM(ActivityMainBinding binding, Context context) {
        this.context = context;
        this.binding = binding;
    }

    public void click(View view) {
        Toast.makeText(view.getContext(),"可以点击", Toast.LENGTH_SHORT).show();
    }
//    通过对象传递进来binding和context,以后在方法体内部就可以直接使用。暂时只是提供方法,以后有用。。。
}

好了,到activity里面去写逻辑,(其实也可以在VM里面写,在 public void click(View view),当点击的时候,在进行判断。不过此时做不到时时判断,暂时不是想要的。)

public class MainActivity extends AppCompatActivity {

    private ActivityMainBinding binding;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //        setContentView(R.layout.activity_main);

        binding = DataBindingUtil.setContentView(this, R.layout.activity_main);
        MainVM mv = new MainVM(binding,this);
        binding.setInfo(mv);
    }

    @Override
    protected void onStart() {
        super.onStart();

        //      给第一个密码添加实时监听  
        binding.pwd.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {

            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {

            }

            @Override
            public void afterTextChanged(Editable s) {
                String trim_pwd = s.toString().trim();
                if (trim_pwd.length() < 6 && trim_pwd.length() > 16) {
                    binding.bt.setEnabled(false);
                } else {
                    if (TextUtils.equals(trim_pwd, binding.pwdAffirm.getText().toString().trim())) {
                        binding.pwdConfulict.setVisibility(View.INVISIBLE);
                        if (trim_pwd.length() >= 6 && trim_pwd.length() <= 16) {
                            binding.bt.setEnabled(true);
                        } else {
                            binding.bt.setEnabled(false);
                        }
                    } else {

                        binding.pwdConfulict.setVisibility(View.VISIBLE);
                        binding.bt.setEnabled(false);
                    }
                }


            }
        });

        //      给第二个密码添加实时监听  
        binding.pwdAffirm.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {

            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {

            }

            @Override
            public void afterTextChanged(Editable s) {
                String trim_pwd_affirm = s.toString().trim();

                if (trim_pwd_affirm.length() < 6 && trim_pwd_affirm.length() > 16) {
                    binding.bt.setEnabled(false);
                } else {
                    if (TextUtils.equals(trim_pwd_affirm,binding.pwd.getText().toString().trim())){
                        binding.pwdConfulict.setVisibility(View.INVISIBLE);
                        if (trim_pwd_affirm.length() >= 6 && trim_pwd_affirm.length() <= 16) {
                            binding.bt.setEnabled(true);
                        } else {
                            binding.bt.setEnabled(false);
                        }
                    } else {
                        binding.pwdConfulict.setVisibility(View.VISIBLE);
                        binding.bt.setEnabled(false);
                    }
                }
            }
        });
    }
}
两次密码不一致时的截图,button不可点击 两次密码一致时的截图,button可点击
  代码看看应该就可以懂,这里想说的是,在创建MainVM mv = new MainVM(binding,this);时,传递binding,this两个参数,在MainVM类里面就可以直接
使用了,这个很重要,以后可能还会有很多类似的参数都需要通过他来进行传递。
  如果不传递,那么在MainVM类里面就不能使用binding调用布局里面的 id 了,也不能得到上下文。因此,这个参数很重要。

百度网盘代码链接:http://pan.baidu.com/s/1boLoLav 密码:ldko

相关文章

网友评论

    本文标题:Android6.0之强大的DataBinding(数据绑定)-

    本文链接:https://www.haomeiwen.com/subject/xxfqnttx.html