AlertDialog创建了多次Android

时间:2014-10-17 05:27:36

标签: android android-alertdialog

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();
    }

4 个答案:

答案 0 :(得分:0)

像这样检查

if (alertDialog != null && !alertDialog.isShowing()) {
        //then show your dialog..else not 
  }

答案 1 :(得分:0)

而不是      builder.show();

使用

// 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++;
    }
}