2014-06-30 52 views
0

上午使用時間選擇器通過對話框片段。在那個時間選擇器設置最小和最大time.i時,我得到了堆棧溢出錯誤,當我點擊減號(現在的時間以分鐘爲單位的最小值)按鈕分鐘時間選擇器API 10,但在API 15中,其工作fine.am無法得到解決這個問題。任何人都知道可以幫助我解決這個問題。Android中的Timepicker中的Stackoverflow錯誤?

時間選擇對話框片段類

package data.picker; 

import java.text.DateFormat; 
import android.app.Dialog; 
import android.app.TimePickerDialog; 
import android.app.TimePickerDialog.OnTimeSetListener; 
import android.os.Bundle; 
import android.support.v4.app.DialogFragment; 
import android.widget.TimePicker; 

public class Time_picker extends DialogFragment{ 

OnTimeSetListener ontimeSet; 

int minHour; 
int minMinute; 

private int maxHour = 24; 
private int maxMinute =00; 
DateFormat dateFormat; 
public Time_picker() { 

} 

public void setCallBack(OnTimeSetListener ontime) { 

    ontimeSet = ontime; 

} 

private int hours, minutes; 
@Override 
public void setArguments(Bundle args) { 
    super.setArguments(args); 
    hours = args.getInt("hours"); 
    minutes = args.getInt("minute"); 

    minHour = hours; 
    minMinute = minutes; 
} 

@Override 
public Dialog onCreateDialog(Bundle savedInstanceState) { 

    TimePickerDialog _time = new TimePickerDialog(getActivity(), ontimeSet, hours, minutes,false){ 

     @Override 
     public void onTimeChanged(TimePicker view, int hourOfDay, int minute) { 
      // TODO Auto-generated method stub 

      try{ 
       boolean validTime; 
       if(hourOfDay < minHour) { 
        validTime = false; 
       } 
       else if(hourOfDay == minHour) { 
        validTime = minute >= minMinute; 
       } 
       else if(hourOfDay == maxHour) { 
        validTime = minute <= maxMinute; 
       } 
       else { 
        validTime = true; 
       } 

       if(validTime) { 
        hours = hourOfDay; 
        minutes = minute; 
       } 
       else { 
        updateTime(hours, minutes); 
       } 

      }catch(Exception e){ 

      } 
     } 
    }; 
    return _time; 
} 
} 

登錄貓錯誤

enter image description here

回答

1

要調用updateTime(hours, minutes);onTimeChangedvalidTime==false。這是你無限循環的根本原因。我不知道爲什麼它適用於API 15(可能是你從來沒有在API 15到達此行)


嘗試這樣的事情。

@Override 
public Dialog onCreateDialog(Bundle savedInstanceState) { 

    TimePickerDialog _time = new TimePickerDialog(getActivity(), ontimeSet, hours, minutes,false){ 
     private boolean ignoreChange = false; 

     @Override 
     public void onTimeChanged(TimePicker view, int hourOfDay, int minute) { 
      if(ignoreChange) return; 
      try{ 
       boolean validTime; 
       if(hourOfDay < minHour) { 
        validTime = false; 
       } 
       else if(hourOfDay == minHour) { 
        validTime = minute >= minMinute; 
       } 
       else if(hourOfDay == maxHour) { 
        validTime = minute <= maxMinute; 
       } 
       else { 
        validTime = true; 
       } 

       if(validTime) { 
        hours = hourOfDay; 
        minutes = minute; 
       } 
       else { 
        try{ 
         ignoreChange = true; 
         updateTime(hours, minutes); 
        }finally{ 
         ignoreChange = false; 
        } 
       } 

      }catch(Exception e){ 
       Log.e(TAG,"Error onTimeChanged",e); 
      } 
     } 
    }; 
    return _time; 
} 
+0

如何使用該條件更新時間選取器。 – Yugesh