在开发中我们经常要根据文本框输入的内容来改变一个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();
}