2017-05-26 87 views
-3

我想从我的班级显示AlertDialog。程序流程正常,因为我能够正确显示Toast消息。但是,对话框永远不会显示?这是为什么发生?我没有收到日志中的任何错误消息和/或没有发现应用程序崩溃。这可能是导致此行为的原因。如何显示简单的AlertDialog?

我已经给出了所需的权限

<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" /> 

请参考我的代码:

if (serverApkVersion > localApkVersion) { 
    AlertDialog alertDialog = new AlertDialog.Builder(this) 
      .setTitle("Title") 
      .setMessage("Are you sure?") 
      .create(); 
    alertDialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT); 
    alertDialog.show(); 
    Toast.makeText(context, "toast is working, but dialog is not >:(", Toast.LENGTH_LONG).show(); 
} else { 
    Toast.makeText(context, "up to date!", Toast.LENGTH_LONG).show(); 
} 
+0

您错过了一行代码:alertDialog.create(); –

+0

为了使用'TYPE_SYSTEM_ALERT',因为MM,用户必须明确地允许你的应用程序绘制其他应用程序。这意味着您无法启动运行时权限,并且不足以在清单中添加此权限。您唯一能做的就是从您的设备启动系统设置页面,让用户授予此权限。 – Opiatefuchs

回答

0

试试这个

AlertDialog.Builder builder = new AlertDialog.Builder(this); 
     builder.setTitle("title"); 
     builder.setMessage("message"); 
     builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() { 
      @Override 
      public void onClick(DialogInterface dialog, int which) { 
       //do your action 
      } 
     });  
     builder.setNegativeButton("No", , new DialogInterface.OnClickListener() { 
      @Override 
      public void onClick(DialogInterface dialog, int which) { 
       //do your action 
      } 
     }); 
     builder.show(); 
+0

谢谢,我感谢你的回答,但你能解释它与我的不同之处吗? – user8068857

+0

让我检查你的代码 –

+0

你应该触发一个点击事件或一些意图打开一个对话框box.please显示你的代码.. –

0

试试这个简单的例子:

public static void showAlert(String msg, final Context context) { 
     final AlertDialog.Builder builder = new AlertDialog.Builder(context); 
     builder.setCancelable(false); 
     builder.setTitle("Alert"). 
       setMessage(msg). 
       setPositiveButton("Ok", new DialogInterface.OnClickListener() { 
        public void onClick(DialogInterface dialog, int id) { 
         dialog.dismiss(); 
        } 
       }); 
     AlertDialog dialog = builder.create(); 
     dialog.show(); 

    } 

对于您的代码,您已获得用户的许可。

0

enter image description here只需将您的AlertDialog替换为AlertDialog.Builder,您就可以轻松前往。

if (serverApkVersion > localApkVersion) { 
    AlertDialog.Builder alertDialog = new AlertDialog.Builder(Checking.this) 
        .setTitle("Title") 
        .setMessage("Are you sure?"); 
        alertDialog.show(); 
     Toast.makeText(context, "toast is working, but dialog is not >:(", Toast.LENGTH_LONG).show(); 
    }else { 
     Toast.makeText(context, "up to date!", Toast.LENGTH_LONG).show(); 
    } 
0

您的AlertDialog代码似乎没问题。我想这个问题是关于你用来创建instanceAlertDialog.Builder的错误Context

用途:

AlertDialog alertDialog = new AlertDialog.Builder(context) 

相反的:

AlertDialog alertDialog = new AlertDialog.Builder(this) 

更新您的代码如下:

if (serverApkVersion > localApkVersion) { 
    AlertDialog alertDialog = new AlertDialog.Builder(context) 
      .setTitle("Title") 
      .setMessage("Are you sure?") 
      .create(); 
    alertDialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT); 
    alertDialog.show(); 
    Toast.makeText(context, "toast is working, but dialog is not >:(", Toast.LENGTH_LONG).show(); 
} else { 
    Toast.makeText(context, "up to date!", Toast.LENGTH_LONG).show(); 
} 

仅供参考,如果您的应用在Android 6.0+上运行,那么您应该为SYSTEM_ALERT_WINDOW添加运行时权限。详情请参阅this

希望这会有所帮助〜