Android中使用時間選擇器TimePickerDialog時onTimeSet執行兩次的問題


在onTimeSet方法中的賦值語句會被執行兩次,后發現這個方法會被執行那個兩次

 

monthEnd = monthEnd+1;
Log.e("month==value", "month:"+monthEnd);

本來系統的月份比實際少一個月,加1就可以了,點一次執行兩次就相當於,我選的7月,而實際卻變成了9月。

onDateSet方法把month的值賦值給了成員monthMember即monthMember = month,在onTimeSet中把month+1設置給了textview,即textview.setText(month+1),這個時候就會自動加2,所以避免這種執行兩次的情況。

網上一搜,說這是android4.1和4.2存在的一個bug,點擊確定和取消按鈕時,會出發onTimeSet;在dialog的onStop(比如dialog dismiss時)中,也調用了onTimeSet方法。需要修改framework里的TimePickerDialog.java源文件

所以說復寫對話框注掉onStop就行了,
@Override
    protected void onStop() {
        // TODO Auto-generated method stub
        //super.onStop();
    
    }
 

我的解決辦法是

1:在onDateSet方法中monthMember = month+1;來完成賦值,然后再把monthMember設置給textview,onTimeSet中只是完成了textview.settext(monthMember);並沒有加1的操作,即使是onTimeSet執行兩次也無所謂,不會受到影響。

endTime.setOnClickListener(new OnClickListener() {
            private int yearEnd = 0;
            private int monthEnd = 0;
            private int dayEnd = 0;
            
            @Override
            public void onClick(View v) {
                
                TimePickerDialog  tpDialog  = new  TimePickerDialog(StartActivity.this, new OnTimeSetListener() {
                    
                    private String hour2_02;
                    private String minute2_02;
                    
                    @Override
                    public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
                        
                        
                        System.out.println("--timePicker-----" + hourOfDay + "-----" + minute);
                        String hour2_01 = hourOfDay + "";
                        if (hour2_01.length() == 1) {
                            hour2_02 = "0" + hour2_01;
                        } else {
                            hour2_02 = hour2_01;
                        }
                        String minute2_01 = minute + "";
                        if (minute2_01.length() == 1) {
                            minute2_02 = "0" + minute2_01;
                        } else {
                            minute2_02 = minute2_01;
                        }
                        
                        Log.e("SSSSS", "hour2_02:"+hour2_02+",minute2_02"+minute2_02);
                        list_time.add(hour2_02 + ":" + minute2_02 + ":00");
                        
                        int hourTemp = hourOfDay - 3;
                        if(hourTemp <=0){
                            hourTemp = hourTemp+12;
                        }
                        
                        Log.e("設置date", "設置date");
                        monthEnd = monthEnd+1;
                        Log.e("month==value", "month:"+monthEnd);
                        
                        Calendar cal = Calendar.getInstance();
                        cal.setTimeInMillis(System.currentTimeMillis());
                        
                        int hourVariable = cal.get(Calendar.HOUR);
                        int minVariable = cal.get(Calendar.MINUTE);
                        int yearVariable = cal.get(Calendar.YEAR);
                        int monthVariable = cal.get(Calendar.MONTH);
                        int dayVariable = cal.get(Calendar.DAY_OF_MONTH);
                        
                        
                        if(yearEnd>yearVariable){//選的時間大於當前時間
                            yearEnd = yearVariable;
                            if(monthEnd>minVariable){
                                monthEnd = minVariable;
                                if(dayEnd > dayVariable){
                                    dayEnd = dayVariable;
                                    if(hourOfDay > hourVariable){
                                        hourOfDay = hourVariable;
                                        if(minute > minVariable){
                                            minute = minVariable;
                                        }
                                    }
                                }
                            }
                        }
                        
                        endTime.setText(yearEnd+"-"+ monthEnd+"-"+dayEnd+"  "+hourOfDay+":"+minute+":00");
                        startTime.setText(yearEnd+"-"+ monthEnd+"-"+dayEnd+"  "+hourTemp+":"+minute+":00");//這個是顯示最新 的
                    }
                    
                }, hourVariable, minVariable, false);
                
                
                
                
                tpDialog.show();
                
                
                    DatePickerDialog dpDialog = new DatePickerDialog(StartActivity.this,new OnDateSetListener() {
                    private String month2_02;
                    private String day2_02;
                    private String hour2_02;
                    private String minute2_02;
                     
                    public void onDateSet(DatePicker view, int year, int monthOfYear,
                            int dayOfMonth) {

                        if (list_time.size() == 0) { // 時間沒選
                            int i = Calendar.HOUR_OF_DAY;
                            int minute = Calendar.MINUTE;
                            String hour2_01 = i + "";
                            if (hour2_01.length() == 1) {
                                hour2_02 = "0" + hour2_01;
                            } else {
                                hour2_02 = hour2_01;
                            }
                            String minute2_01 = minute + "";
                            if (minute2_01.length() == 1) {
                                minute2_02 = "0" + minute2_01;
                            } else {
                                minute2_02 = minute2_01;
                            }

                            list_time.add(hour2_02 + ":" + minute2_02 + ":00");
                            Log.e("SSSSS2", "hour2_02:"+hour2_02+",minute2_02"+minute2_02);

                        }

                        System.out.println("--gjhf------datePicker---------" + year + "---" + monthOfYear + "----" +dayOfMonth + "---");
                        System.out.println("---end time------" + list_time.get(list_time.size() - 1));

                        String month2_01 = (monthOfYear + 1) + "";
                        if (month2_01.length() == 1) {
                            month2_02 = "0" + month2_01;
                        } else {
                            month2_02 = month2_01;
                        }

                        String day2_01 = dayOfMonth + "";
                        if (day2_01.length() == 1) {
                            day2_02 = "0" + day2_01;
                        } else {
                            day2_02 = day2_01;
                        }

                        list_data_time.add(year + "-" + month2_02 + "-" + day2_02 + list_time.get(list_time.size() - 1));
//                        dialog.cancel();
                        /*if (flag_dialog) {

                            dialogData();
                            flag_dialog = false;
                        }*/
                    
                        Log.e("==========", "year"+year);
//                        startTime.setText(year+"-"+ monthOfYear+"-"+dayOfMonth+"  "+hour2_02+":"+minute2_02);
//                        startTime.setText(list_data_time.get(list_time.size() - 1));//這里不能設置,頂多能保存
                        
                        
                        
                        Log.e("date -time11 ", list_data_time.get(list_time.size() - 1));
                         yearEnd = year;
                         monthEnd = monthOfYear;
                         dayEnd = dayOfMonth;
                    }
                }, yearVariable, monthVariable-1, dayVariable);
                
                dpDialog.show();
                
            }
        });

 

2:第二種解決辦法:

//復寫對話框注掉onStop就行了,
@Override
    protected void onStop() {
        // TODO Auto-generated method stub
        //super.onStop();
    
    }

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM