[英]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
。 如何傳遞我的LoginActivity
的Context
作為參數?
嘗試更換它。
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.