我试图在代码中显示一个警告对话框。
构建时需要一个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没有弹出。如何传递ContextLoginActivity作为参数?

最佳答案

您可以重载该方法

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

10-07 19:46
查看更多