簡體   English   中英

AlertDialog將不會顯示

[英]AlertDialog won't show

我試圖在代碼中顯示一個警告對話框。 它在構建時需要一個Context作為其參數。 我希望它在我的LoginActivity彈出:

    public class LoginActivity extends ActionBarActivity
    { 
            // Methods inside         
    }

但是我生成alertDialog函數在單獨的類中。 因此,為了獲得適當的Context我嘗試了一個額外的類,該類為我提供了ApplicationContext ,然后將其用作必需參數。

這是我的函數,它生成alertDialog

    public static void alertFailure(String errorTitle, String errorMessage){
            Log.d("Alert Failure", "alerting failure");
            AlertDialog.Builder builder = new AlertDialog.Builder(MyApplication.getAppContext()); // Needs context of loginactivity
            builder.setTitle(errorTitle);
            builder.setMessage(errorMessage);
            builder.setPositiveButton("OK", new DialogInterface.OnClickListener(){
                @Override
                public void onClick(DialogInterface dialog, int which){

                }
            });
            AlertDialog alertDialog = builder.create();
            alertDialog.show();
    }

這是我用來獲取ApplicationContext

    public class MyApplication extends Application{
        private static Context context;

        public void onCreate(){
            super.onCreate();
            MyApplication.context = getApplicationContext();
        }

        public static Context getAppContext(){
            return context;
        }
    }

當我登錄程序時,可以看到我的函數運行良好,但是沒有彈出alertDialog 如何傳遞我的LoginActivityContext作為參數?

嘗試更換它。

AlertDialog alertDialog = builder.create();
        alertDialog.show();

有了這個..

builder.show();

您需要對話框的活動上下文。 應用程序上下文不起作用。

您可以將其作為參數傳遞給方法,例如

public static void alertFailure(Activity context, String errorTitle, String errorMessage){

並從活動中調用:

AnotherClass.alertFailure(this, ...);

在alertFailure()中添加另一個參數作為ActivityContext,然后調用alertFailure("Alert Failure", "alerting failure", LoginActivity.this); 從LoginActivity類。

您可以重載該方法

public static void alertFailure(Context context, String errorTitle, String errorMessage) {
 Log.d("Alert Failure", "alerting failure");
        AlertDialog.Builder builder = new AlertDialog.Builder(context); // Needs context of loginactivity
        builder.setTitle(errorTitle);
        builder.setMessage(errorMessage);
        builder.setPositiveButton("OK", new DialogInterface.OnClickListener(){
            @Override
            public void onClick(DialogInterface dialog, int which){

            }
        });
        AlertDialog alertDialog = builder.create();
        alertDialog.show();
}

並將其NomeClass.alertFailure(LoginActivity.this, "title", "message");

並且您可以保留沒有上下文的版本:

public static void alertFailure(String errorTitle, String errorMessage){
      alertFailure(MyApplication.getContext(), erroTitle, errorMessage);
 }

我認為Context沒有問題。

像這樣致電alertFailure

new Handler().post(new Runnable() {
    @Override
    public void run() {
        alertFailure("Title", "Message");
    }
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM