改变button可点击的工具类

在开发中我们经常要根据文本框输入的内容来改变一个button的状态,数据改变时,当数据正确才可以点击,数据不正确,设置成不可点击状态,并且改变他们的样式。当然这里的“正确”是要根据自己的需求来的;

下面贴出代码:

/**
 * Created 郑贤鑫 on 2017/3/7.
 */

public class CanClickUtil {
    private Context context;
    private OnDataListener listener;
    private TextView tvbtn;

    public static CanClickUtil getInstance(){
        return new CanClickUtil();
    }

    public void configBtn(Context context,TextView btn, EditText editText,OnDataListener listener){
        this.context=context;
        this.tvbtn=btn;

        editText.addTextChangedListener(watcher);
        this.listener=listener;

    }

    public interface OnDataListener{
        boolean dataIsOk();
    }

    TextWatcher watcher=new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

        }

        @Override
        public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
            if("".equals(charSequence.toString())){

            }
            if(listener.dataIsOk()){
                tvbtn.setClickable(true);
                tvbtn.setBackgroundColor(context.getResources().getColor(R.color.tev_sure));
            }else {
                tvbtn.setClickable(false);
                tvbtn.setBackgroundColor(context.getResources().getColor(R.color.good_status_two));
            }
        }

        @Override
        public void afterTextChanged(Editable editable) {

        }
    };

}

因为安卓里面的Button是继承自TextView,所以这里可以传入textview写的按钮,也可以传入button写的按钮;然后是给EditText添加了监听事件,所以只要输入的数据改变了,就会进行一次数据是否正确的判断。


使用:

CanClickUtil.getInstance().configBtn(context,btnSubmit, editNum, new CanClickUtil.OnDataListener() {
            @Override
            public boolean dataIsOk() {
                String data=editNum.getText().toString();
                Double d=0.0;
                try {
                    d=Double.valueOf(data);
                }catch (Exception e){
                    e.printStackTrace();
                    d=0.0;
                }
                if(d<1){
                    return false;
                }
                return true;
            }
        });

这里主要是依靠了定义的一个接口回调,你实现这个接口里的具体方法,在里面具体设置你的判断条件,建议只列出各种错误的条件,只要错误就返回false,后面的代码就不会执行了,如果不满足任何错误条件,那么走到方法最后面,返回true,最上面写的那个工具类就会接收到这个方法返回的结果,根据结果来设置按钮的状态;

public interface OnDataListener{
        boolean dataIsOk();
    }



当然有时候是一个页面有多个输入框,只有一个按钮,那么你也可以多调用几次这个方法,传入不同的EditText,但传入同一个button,也是可以的;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值