首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > Android >

又来请问一个DatePickerDialog有关问题

2013-11-06 
又来请教一个DatePickerDialog问题我做了日期选择的,要有两个按钮“确认”和“取消”。我想达到的效果是按“取消

又来请教一个DatePickerDialog问题
我做了日期选择的,要有两个按钮“确认”和“取消”。
我想达到的效果是按“取消”关闭弹出的日期选择对话框,按“确认”关闭弹出的日期对话框同时把选择的日期写到textview中。
但是现在不管我按“取消”还是“确认”,日期都会写到textview中。怎么解决?
“取消”和“确认”的单击事件跟onDateSet有什么关联?
还有如果我在onDateSet中写toast弹出信息汇报“Unfortunately,test01 has stopped.”错,这又是为什么呢?
又来请问一个DatePickerDialog有关问题


private DatePickerDialog.OnDateSetListener DatePickerListener = new DatePickerDialog.OnDateSetListener(){

@Override
public void onDateSet(DatePicker view, int year, int monthOfYear,
int dayOfMonth) {
// TODO Auto-generated method stub
textview=(TextView)findViewById(R.id.textview1);
textview.setText(year+"-"+monthOfYear+"-"+dayOfMonth);
}
};



DatePickerDialog picker = new DatePickerDialog(MainActivity.this, DatePickerListener,
                iYear, iMonth, iDay);
        picker.setCancelable(true);
        picker.setCanceledOnTouchOutside(true);
        picker.setButton(DialogInterface.BUTTON_POSITIVE, "OK",
                new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        Log.d("Picker", "Correct behavior!");
                    }
                });
        picker.setButton(DialogInterface.BUTTON_NEGATIVE, "Cancel",
                new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        Log.d("Picker", "Cancel!");
                    }
                });
        picker.show();

[解决办法]
抱歉,没看清。你可以加一个boolean标志位,
@Override
    public void onDateSet(DatePicker view, int year, int monthOfYear,
            int dayOfMonth) {
        // TODO Auto-generated method stub
if(flag){
        textview=(TextView)findViewById(R.id.textview1);
        textview.setText(year+"-"+monthOfYear+"-"+dayOfMonth);
}
    }
picker.setButton(DialogInterface.BUTTON_POSITIVE, "OK",
                new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        Log.d("Picker", "Correct behavior!");
flag = true;
                    }
                });
        picker.setButton(DialogInterface.BUTTON_NEGATIVE, "Cancel",
                new DialogInterface.OnClickListener() {
                    @Override


                    public void onClick(DialogInterface dialog, int which) {
                        Log.d("Picker", "Cancel!");
flag = false;
                    }
                });

[解决办法]
你好哈,那个Toast是因为你那个iYear是int型的,你加个 ( + "" )就可以了
然后我看了那个DatePickerDialog的源码,感觉是没有什么问题,然后我换了种想法试了下,发现果然是这样
你那个onDateSet被触发其实是在你这个“dialog”关闭的时候,它才去识别到那个日期的改变而不是在你更改“日期控件,年月日值的时候”,这样的话,其实就有个问题,你关闭掉这个dialog,不管以什么方式关闭(比如:按了“back”键,"或者触碰了屏幕的其他位置",或者按了"cancle"),肯定都会触发这个事件,而且都会在你自己设置的button的onclick执行完之后执行,所以,这就导致你只能在那个onDateSet里面写那个“视图层view”的东西了,你用这个东西虽然是方便了,但是太不灵活了,你自己随随便便布局一下,放个datePicker再自己写两个button,这样会比这个好用不知道多少!!!

热点排行