2017-02-06 18 views
0
トップ

に私は私のMainActivityからAlertDialogをトリガすることだし、それは次のように正常に動作します:の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は、メインリスナーではなく、MainActivityのプッシュ通知リスナーによってトリガーされます。

+0

最初のアクティビティの最初のコンテキストを使用して、新しいコンテキストをダイアログに渡しますか? –

+0

メインアクティビティと常に同じ最初のコンテキスト – fana

答えて

0

ダイアログが同じアクティビティコンテキストを使用しているので、このダイアログは常にトップにしなければならない場合、それは

公共ボイドshowCustomAlert(文字列テキスト){

のようなSYSTEM_ALERT_SERVICEで行うことができ、 コンテキストの問題です
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

これは正しくありがたいです。 Android 6でアプリがクラッシュしたため、TYPE_SYSTEM_ALERTをTYPE_TOASTに変更しました。ありがとうございました! – fana