Android 4.1.2对话框被调用两次 [英] Android 4.1.2 dialogs are called twice

查看:112
本文介绍了Android 4.1.2对话框被调用两次的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

当我打电话来显示一个对话框时,我的应用程序有这个问题,它被称为两次。这只会发生在android 4.1及以上。低版本工作正常,所以我不认为这是任何代码问题。



你以前听过这个问题吗?



这里的代码:

  Button edit =(Button)ad.findViewById(R.id.editBtn); 
edit.setTypeface(roboto);
edit.setOnClickListener(new OnClickListener(){

@Override
public void onClick(View v){

setDate();
ad.dismiss();
}
});

ad.show();

ad.setOnDismissListener(new OnDismissListener(){

@Override
public void onDismiss(DialogInterface dialog){
shiftingActivity.setPressed(true);

}
});
}

public void setDate(){
//初始化并打开设置的日期对话框
DatePickerDialog setDateDialog = new DatePickerDialog(Shifts.this,
datePickerListener,dateAndTime.get(Calendar.YEAR),
dateAndTime.get(Calendar.MONTH),
dateAndTime.get(Calendar.DAY_OF_MONTH));

setDateDialog.setTitle(Set Date);
setDateDialog.show();

}

public void setStartTime(){

TimePickerDialog setStartTimeDialog = new TimePickerDialog(Shifts.this,
startTimePicker,dateAndTime.get (Calendar.HOUR),
dateAndTime.get(Calendar.MINUTE),true);

setStartTimeDialog.setTitle(Started At:);
setStartTimeDialog.show();

}

public void setEndTime(){

TimePickerDialog setEndTimeDialog = new TimePickerDialog(Shifts.this,
setEndTime,dateAndTime.get (Calendar.HOUR),
dateAndTime.get(Calendar.MINUTE),true);
setEndTimeDialog.setTitle(Ended:);
setEndTimeDialog.show();
}

TimePickerDialog.OnTimeSetListener startTimePicker = new TimePickerDialog.OnTimeSetListener(){

@Override
public void onTimeSet(TimePicker view,int hourOfDay,int分钟){
startIntHours = hourOfDay;
startIntMinutes = minute;
editStartTime = String.format(%02d,hourOfDay)+:
+ String.format(%02d,分钟);
setEndTime();

}
};

TimePickerDialog.OnTimeSetListener setEndTime = new TimePickerDialog.OnTimeSetListener(){

@Override
public void onTimeSet(TimePicker视图,int hourOfDay,int minute){

finishIntHours = hourOfDay;
finihIntMinutes =分钟;

if(finishIntHours< startIntHours){
finishIntHours = finishIntHours + Utility.HOURS_TIME_UNIT;
}

if(finihIntMinutes< startIntMinutes){
finihIntMinutes = finihIntMinutes + Utility.MINUTES_TIME_UNIT;
}

totalHours = finishIntHours - startIntHours;
totalMinutes = finihIntMinutes - startIntMinutes;
Log.i(TotalHours in time picker,+ totalHours);
Log.i(Totalminute in time picker,+ totalMinutes);

editEndTime = String.format(%02d,hourOfDay)+:
+ String.format(%02d,minute);

替换(Shifts.view,Shifts.position);

}
};


解决方案

根据您的代码,这些方法都不会所谓的,因为你不会使用 TimePickerDialogs



就是说,有一个与行为有关的已知问题 DatePickerDialog / TimePickerDialog 可能是相关的: http://code.google.com/p/android/issues/detail?id=34833


I have this issue with my app when I call to show a dialog, it is being called twice somehow. This only happens with android 4.1 and above. Lower version works fine so I dont think it's any code issue.

Did you heard\encountered this issue before?

here the code:

Button edit = (Button) ad.findViewById(R.id.editBtn);
        edit.setTypeface(roboto);
        edit.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {

                setDate();
                ad.dismiss();
            }
        });

        ad.show();

        ad.setOnDismissListener(new OnDismissListener() {

            @Override
            public void onDismiss(DialogInterface dialog) {
                shiftsActivity.setPressed(true);

            }
        });
    }

    public void setDate() {
    // Initialize and open the set date dialog
    DatePickerDialog setDateDialog = new DatePickerDialog(Shifts.this,
            datePickerListener, dateAndTime.get(Calendar.YEAR),
            dateAndTime.get(Calendar.MONTH),
            dateAndTime.get(Calendar.DAY_OF_MONTH));

    setDateDialog.setTitle("Set Date");
    setDateDialog.show();

}

public void setStartTime() {

    TimePickerDialog setStartTimeDialog = new TimePickerDialog(Shifts.this,
            startTimePicker, dateAndTime.get(Calendar.HOUR),
            dateAndTime.get(Calendar.MINUTE), true);

    setStartTimeDialog.setTitle("Started At:");
    setStartTimeDialog.show();

}

public void setEndTime() {

    TimePickerDialog setEndTimeDialog = new TimePickerDialog(Shifts.this,
            setEndTime, dateAndTime.get(Calendar.HOUR),
            dateAndTime.get(Calendar.MINUTE), true);
    setEndTimeDialog.setTitle("Ended:");
    setEndTimeDialog.show();
}

TimePickerDialog.OnTimeSetListener startTimePicker = new TimePickerDialog.OnTimeSetListener() {

    @Override
    public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
        startIntHours = hourOfDay;
        startIntMinutes = minute;
        editStartTime = String.format("%02d", hourOfDay) + ":"
                + String.format("%02d", minute);
        setEndTime();

    }
};

TimePickerDialog.OnTimeSetListener setEndTime = new TimePickerDialog.OnTimeSetListener() {

    @Override
    public void onTimeSet(TimePicker view, int hourOfDay, int minute) {

        finishIntHours = hourOfDay;
        finsihIntMinutes = minute;

        if (finishIntHours < startIntHours) {
            finishIntHours = finishIntHours + Utility.HOURS_TIME_UNIT;
        }

        if (finsihIntMinutes < startIntMinutes) {
            finsihIntMinutes = finsihIntMinutes + Utility.MINUTES_TIME_UNIT;
        }

        totalHours = finishIntHours - startIntHours;
        totalMinutes = finsihIntMinutes - startIntMinutes;
        Log.i("TotalHours in time picker", "" + totalHours);
        Log.i("Totalminute in time picker", "" + totalMinutes);

        editEndTime = String.format("%02d", hourOfDay) + ":"
                + String.format("%02d", minute);

        replace(Shifts.view, Shifts.position);

    }
};

解决方案

According to your code, neither of those methods are ever called, because you never use the TimePickerDialogs.

That being said, there is a known issue related to the behavior of DatePickerDialog/TimePickerDialog that may be relevant: http://code.google.com/p/android/issues/detail?id=34833

这篇关于Android 4.1.2对话框被调用两次的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆