2017-02-06 2 views
0

Я спровоцировав AlertDialog от моего MainActivity и она отлично работает так:Android AlertDialog всегда на вершине

public void showCustomAlert(String text){ 

    final String alertText = text; 

    runOnUiThread(new Runnable() { 
     @Override 
     public void run() { 
      AlertDialog.Builder myDialogBox = new AlertDialog.Builder(mContext); 
      myDialogBox.setTitle("Alert"); 
      myDialogBox.setMessage(alertText); 
      myDialogBox.setCancelable(false); 
      myDialogBox.setPositiveButton("OK", new DialogInterface.OnClickListener(){ 

        public void onClick(DialogInterface dialog, int whichButton) { 
         dialog.dismiss(); 
        } 

      }); 
      myDialogBox.setNegativeButton("Cancel", new DialogInterface.OnClickListener() 
      { 
        public void onClick(DialogInterface dialog, int which) { 
         dialog.dismiss(); 
        } 
      }); 
      AlertDialog alertDialog = myDialogBox.create(); 
      alertDialog.show(); 
     } 
    }); 
} 

Проблема возникает, когда я открываю другую деятельность на вершине MainActivity и вызвать AlertBox снова: это получить за эту деятельность. Когда я закрываю активность, там это: отображается AlertDialog.

Как я могу показать этот AlertDialog всегда сверху?

Примечание: этот AlertDialog запускается прослушивателем уведомлений push на моей MainActivity, а не с помощью прослушивателя кликов.

+0

Вы можете передать новый контекст в диалог или использовать первый контекст из первого действия? –

+0

Всегда тот же самый первый контекст из основного вида деятельности – fana

ответ

0

Это проблема контекста, так как диалог, используя тот же контекст деятельности, Если этот диалог должен быть на вершине всегда, это может быть сделано с SYSTEM_ALERT_SERVICE как

общественности недействительным showCustomAlert (String текст) {

final String alertText = text; 

runOnUiThread(new Runnable() { 
    @Override 
    public void run() { 
     AlertDialog.Builder myDialogBox = new AlertDialog.Builder(mContext); 
     myDialogBox.setTitle("Alert"); 
     myDialogBox.setMessage(alertText); 
     myDialogBox.setCancelable(false); 
     myDialogBox.setPositiveButton("OK", new DialogInterface.OnClickListener(){ 

       public void onClick(DialogInterface dialog, int whichButton) { 
        dialog.dismiss(); 
       } 

     }); 
     myDialogBox.setNegativeButton("Cancel", new DialogInterface.OnClickListener() 
     { 
       public void onClick(DialogInterface dialog, int which) { 
        dialog.dismiss(); 
       } 
     }); 
     AlertDialog alertDialog = myDialogBox.create(); 
       alertDialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT); 
     alertDialog.show(); 
    } 
}); 

}

Позаботьтесь разрешения "android.permission.SYSTEM_ALERT_WINDOW". Надеюсь, что это решает вашу проблему.

+0

Это правильно, спасибо. Просто изменил TYPE_SYSTEM_ALERT на TYPE_TOAST, потому что он разбил приложение на Android 6. Спасибо! – fana

Смежные вопросы