如何在类中显示一个扩展Application的AlertDialog

时间:2015-05-31 08:19:57

标签: android android-alertdialog

我有一个扩展Application的类。 目标是在应用程序开始后立即显示AlertDialog(带有1 OK按钮),然后(每次用户运行应用程序时,但每次用户从主要活动进入其他活动)。

主要活动的名称是Activity1。

所以这是扩展Application的类:

   public class MyApp extends Application {
        @Override
        public void onCreate() {
            super.onCreate();

            Activity1 myActivity1=new Activity1();

            AlertDialog.Builder builder = new AlertDialog.Builder(myActivity1);
             builder.setMessage("Hello").setCancelable(false).setPositiveButton("OK",                                                                   new DialogInterface.OnClickListener() {
               public void onClick(DialogInterface dialog, int id) {
                    //do things
               }
            });
            AlertDialog alert = builder.create();
            alert.show();
        }
    }

这是我得到的错误:

java.lang.RuntimeException: Unable to create application…...NullPointerException: Attempt to invoke virtual method 'android.content.pm.ApplicationInfo android.content.Context.getApplicationInfo()' on a null object reference

我认为activity1不是正确的参数。我试过了这个"这个"争论也。我的意思是:

AlertDialog.Builder builder = new AlertDialog.Builder(this);

它也没有帮助。

如果有人对此有所了解,我将非常感谢您的帮助。谢谢!

2 个答案:

答案 0 :(得分:2)

您需要一个扩展具有布尔值的Application的类。这用于存储在应用程序运行时持续的全局值。

public class MyApplication extends Application {
    public boolean hasShownAlertDialog = false; // you can do private and use getter/setters, but, that's frowned upon.
}

在您的Android清单中,在应用程序下,您需要定义您正在使用自定义实现。

<application android:name="com.example.MyApplication" [...]>

在Activity1中,在onCreate中,检查全局变量:

public void OnCreate(Bundle bundle) {
    ...
    if (!(MyApplication)getApplication().hasShownAlertDialog) {
        // show alert dialog
        (MyApplication)getApplication().hasShownAlertDialog = true;
    }
}

答案 1 :(得分:0)

使用全局变量来确定您是否已经显示该对话框。你的MyApp看起来像这样

    public class MyApp extends Application {

    // showDialog will be true for the first time
    private boolean showDialog = true;

    public boolean getDialog() {
        return showDialog;
    }

    public void setDialog(boolean showDialog) {
        this.showDialog = showDialog;
    }

    @Override
    public void onCreate() {
        super.onCreate();



    }
}

然后在Activity1的onCreate()方法内添加以下内容

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    boolean showDialog = ((MyApp) this.getApplication()).getDialog();
    if(showDialog == true) {
        //Toast.makeText(this, "Show dialog", Toast.LENGTH_LONG).show();
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setMessage("Hello").setCancelable(false).setPositiveButton("OK",                                                                   new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int id) {
                //do things
            }
        });
        AlertDialog alert = builder.create();
        alert.show();
        // Set showDialog to false now so you don't see it again
        ((MyApp) this.getApplication()).setDialog(false);
    }
    else {
        Log.d("DIALOG", "Do not show dialog");
    }

}

不要忘记在Manifest文件中声明您的Application类。在<application>标记内添加android:name=".MyApp"。例如:

<application
    android:name=".MyApp"
    android:icon=""
    ....
>