我试图在我的代码中显示警告对话框。
它构建为参数时需要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
作为参数传递?
答案 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");
}
});