#android #android-dialogfragment #android-timepicker
#Android #android-dialogfragment #android-timepicker
Вопрос:
я использую средство выбора времени через фрагмент диалогового окна.В этом сборщике времени я установил минимальное и максимальное время. я получил ошибку переполнения стека, когда я нажимаю минус (теперь время в минимальном значении в минутах) кнопка минут в сборщике времени в API 10, но в API 15 она работает fine.am не удалось получить решение для этогопроблема.Может ли кто-нибудь помочь мне решить эту проблему.
Класс фрагмента диалогового окна выбора времени
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;
}
}
Ошибка журнала-cat
Ответ №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;
}
Комментарии:
1. как я могу использовать это условие для обновления средства выбора времени.