我正在使用时间选择器通过对话框片段。在那个时间选择器设置了最小和最大时间。当我点击减号(现在是最小值的时间,以分钟为单位)按钮分钟时间选择器时,我得到了堆栈溢出错误在API 10中,但在API 15中,它的工作正常。无法获得此问题的解决方案。任何人都知道帮助我解决此问题。
时间选择器对话框片段类
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;
}
}
Log-cat错误
答案 0 :(得分:1)
updateTime(hours, minutes);
时,您从onTimeChanged
致电validTime==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;
}