AlertDialog不会表现出来

时间:2015-03-24 12:55:23

标签: java android alertdialog android-alertdialog android-context

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

5 个答案:

答案 0 :(得分:1)

尝试替换此..

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

用这个..

builder.show();

答案 1 :(得分:1)

您需要对话框的活动上下文。应用程序上下文不会这样做。

您可以将其作为参数传递给方法,例如

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

从活动中打电话:

AnotherClass.alertFailure(this, ...);

答案 2 :(得分:0)

在alertFailure()中添加另一个参数作为ActivityContext,然后从LoginActivity类调用alertFailure("Alert Failure", "alerting failure", LoginActivity.this);

答案 3 :(得分:0)

你可以重载方法

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

答案 4 :(得分:0)

我认为这不是Context的问题。

像这样呼叫alertFailure

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