AlertDialog 不会显示
AlertDialog won't show
我试图在我的代码中显示一个警告对话框。
它在构建时需要一个 Context
作为参数。
我希望它在我的 LoginActivity
:
中弹出
public class LoginActivity extends ActionBarActivity
{
// Methods inside
}
但是我生成 alertDialog
的函数在单独的 class 中。因此,为了获得合适的 Context
,我尝试了一个额外的 class,它给了我 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();
}
这是我的 class,我用它来获取 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();
在 alertFailure() 中添加另一个参数作为 ActivityContext,然后从 LoginActivity class.
调用 alertFailure("Alert Failure", "alerting failure", LoginActivity.this);
你可以重载方法
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);
}
您需要 activity 对话上下文。应用程序上下文不会。
您可以将其作为参数传递给方法,例如
public static void alertFailure(Activity context, String errorTitle, String errorMessage){
并从 activity 呼叫:
AnotherClass.alertFailure(this, ...);
我认为 Context
没有问题。
像这样调用alertFailure
:
new Handler().post(new Runnable() {
@Override
public void run() {
alertFailure("Title", "Message");
}
});
我试图在我的代码中显示一个警告对话框。
它在构建时需要一个 Context
作为参数。
我希望它在我的 LoginActivity
:
public class LoginActivity extends ActionBarActivity
{
// Methods inside
}
但是我生成 alertDialog
的函数在单独的 class 中。因此,为了获得合适的 Context
,我尝试了一个额外的 class,它给了我 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();
}
这是我的 class,我用它来获取 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();
在 alertFailure() 中添加另一个参数作为 ActivityContext,然后从 LoginActivity class.
调用alertFailure("Alert Failure", "alerting failure", LoginActivity.this);
你可以重载方法
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);
}
您需要 activity 对话上下文。应用程序上下文不会。
您可以将其作为参数传递给方法,例如
public static void alertFailure(Activity context, String errorTitle, String errorMessage){
并从 activity 呼叫:
AnotherClass.alertFailure(this, ...);
我认为 Context
没有问题。
像这样调用alertFailure
:
new Handler().post(new Runnable() {
@Override
public void run() {
alertFailure("Title", "Message");
}
});