Iam在设备震动上显示AlertDialog。问题是,当我摇动设备时,AlertDialog显示两次。因此,如果我解雇AlertDialog,那么最高的一个会被解雇但是在第一个之后还有一个仍然显示。
另外,Iam从代码的另一部分显示相同的AlertDialog,它在单击按钮上显示,工作正常。
所有这些都是在ViewPager中完成的。
如何避免这种情况?
这是我的代码: -
@Override
public void onShake(float force)
{
// TODO Auto-generated method stub
showDialog(timeString, "Confirm .");
}
public void showDialog(String timeString, String title)
{
builder = new AlertDialog.Builder(getActivity());
builder.setTitle(title);
builder.setMessage("Reaching at:"+" "+ timeString+"?");
builder.setNegativeButton("NO", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// Do nothing
}
});
builder.setPositiveButton("YES", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which)
{
// Do nothing but close the dialog
new AddStatusTask().execute();
}
});
builder.show();
}
答案 0 :(得分:0)
像这样检查
if (alertDialog != null && !alertDialog.isShowing()) {
//then show your dialog..else not
}
答案 1 :(得分:0)
使用
// create alert dialog
alertDialog = builder.create();
// show it
alertDialog.show();
并点击此处查看
@Override
public void onShake(float force)
{
// TODO Auto-generated method stub
if(alertDialog != null && !alertDialog.isShowing()){
showDialog(timeString, "Confirm .");
} }
答案 2 :(得分:0)
删除行alertDialog.show();来自showDialog(..)方法并使用这样的方法。
@Override
public void onShake(float force)
{
// TODO Auto-generated method stub
showDialog(timeString, "Confirm .");
if(alertDialog != null && !alertDialog.isShowing()){
alertDialog.show();
} }
答案 3 :(得分:0)
我使用了一个名为alertCounter的变量。我首先将alertCounter初始化为0。当我需要显示警报时,我将alertCounter加1。关闭对话框时,我将alertCounter减1。我仅在alertCounter <1时显示对话框。
声明并初始化alertCounter作为实例变量。
int alertCounter = 0;
然后,创建对话框。
public void createDialog(){
builder = new AlertDialog.Builder(this);
builder.setTitle("Shake Detected");
builder.setMessage("Message");
builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
//do something
alertCounter--;
dialog.dismiss();
}
});
builder.setNegativeButton("No", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
//do something
alertCounter--;
dialog.dismiss();
}
});
builder.setCancelable(false);
alert = builder.create();
}
然后仅在必要时显示一次。
public void showCrashDialog(){
if(alertCounter < 1){
alert.show();
alertCounter++;
}
}