先看下当前的需求。
目前的效果:
点击EditText后弹出DatePickerDialog,然后点击Done就会,或者点击外面阴影都会触发,onDateSet事件,将日期写入EditText.
当前代码:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity07);
initView();
initContent();
}
public void initView(){
et_time=(EditText)findViewById(R.id.et_time);
et_time.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
showDateDialog();
}
});
}
public void initContent(){
Calendar cal=Calendar.getInstance();
year=cal.get(Calendar.YEAR);
month=cal.get(Calendar.MONTH)+1;
day=cal.get(Calendar.DAY_OF_MONTH);
}
private void showDateDialog(){
new DatePickerDialog(this, new OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year, int monthOfYear,
int dayOfMonth) {
et_time.setText(""+year+"-"+month+"-"+day);
}
}, year, month, day).show();
}
很简单,就是点击EditText,触发事件,然后写入日期。
现在有个需求就是增加一个按钮“清空”,点击清空后,清空EditText的值。
关键代码
//给DatePickerDialog设置2个按钮,原来默认的which就是-1这样就把原来的给覆盖了。
dpdialog.setButton(-1,"设置", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dpdialog.onClick(dialog,which);
}
});
dpdialog.setButton(-2,"清空", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dpdialog.onClick(dialog,which);
}
});
class MyDialog extends DatePickerDialog{
public MyDialog(Context context, OnDateSetListener callBack, int year,
int monthOfYear, int dayOfMonth) {
super(context, callBack, year, monthOfYear, dayOfMonth);
}
@Override
public void onClick(DialogInterface dialog, int which) {
//这里通过which来判断是哪个按钮点击了。
switch (which) {
case -1:
super.onClick(dialog, which);//点击设置,就调DatePickerDialog的方法,然后调用onDateSet()
break;
case -2:
et_time.setText("");//点击清空,则清空
break;
}
}
@Override
protected void onStop() {
//这里继承onStop的原因是在DatePickerDialog中,onStop调用了方法,会调用onDateSet()方法,所以这里直接把原来的覆盖,不操作。
}
}
现在效果:
点击设置,则设置日期,点击清空,则清空。