Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/193.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
android中时间选择器中的堆栈溢出错误?_Android_Android Dialogfragment_Android Timepicker - Fatal编程技术网

android中时间选择器中的堆栈溢出错误?

android中时间选择器中的堆栈溢出错误?,android,android-dialogfragment,android-timepicker,Android,Android Dialogfragment,Android Timepicker,我通过对话框片段使用时间选择器。在该时间选择器中,我设置了最小和最大时间。当我在API 10的时间选择器中单击减号(现在是以分钟为单位的最小值)按钮分钟时,我得到了堆栈溢出错误,但是在API 15中,它工作得很好。我无法得到这个问题的解决方案。有谁知道帮助我解决这个问题吗 时间选择器对话框片段类 package data.picker; import java.text.DateFormat; import android.app.Dialog; import android.app.Time

我通过对话框片段使用时间选择器。在该时间选择器中,我设置了最小和最大时间。当我在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;
}
}
package data.picker;
导入java.text.DateFormat;
导入android.app.Dialog;
导入android.app.TimePickerDialog;
导入android.app.TimePickerDialog.OnTimeSetListener;
导入android.os.Bundle;
导入android.support.v4.app.DialogFragment;
导入android.widget.TimePicker;
公共类时间选择器扩展DialogFragment{
OnTimeSetListener ontimeSet;
分钟内;
int分钟;
私有整数maxHour=24;
私有整数最大分钟=00;
日期格式日期格式;
公共时间选择器(){
}
公共void setCallBack(OnTimeSetListener ontime){
ontimeSet=ontime;
}
私人整数小时,分钟;
@凌驾
公共void setArguments(Bundle args){
super.setArguments(args);
小时=args.getInt(“小时”);
分钟=args.getInt(“分钟”);
分钟小时=小时;
分钟=分钟;
}
@凌驾
创建对话框上的公共对话框(Bundle savedInstanceState){
TimePickerDialog\u time=new TimePickerDialog(getActivity(),ontimeSet,hours,minutes,false){
@凌驾
公共void onTimeChanged(时间选择器视图,整数小时日,整数分钟){
//TODO自动生成的方法存根
试一试{
布尔有效时间;
如果(小时日<分钟小时){
validTime=false;
}
否则如果(hourOfDay==分钟小时){
有效时间=分钟>=分钟;
}
否则如果(hourOfDay==maxHour){

validTime=minute您正在调用
updateTime(小时,分钟);
validTime==false
时,从
onTimeChanged
调用
updateTime(小时,分钟)
。这是您无限循环的根本原因。我不知道它为什么在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;
}
@覆盖
创建对话框上的公共对话框(Bundle savedInstanceState){
TimePickerDialog\u time=new TimePickerDialog(getActivity(),ontimeSet,hours,minutes,false){
私有布尔值ignoreChange=false;
@凌驾
公共void onTimeChanged(时间选择器视图,整数小时日,整数分钟){
如果(忽略更改)返回;
试一试{
布尔有效时间;
如果(小时日<分钟小时){
validTime=false;
}
否则如果(hourOfDay==分钟小时){
有效时间=分钟>=分钟;
}
否则如果(hourOfDay==maxHour){

validTime=分钟如何使用该条件更新时间选择器。