我有一个扩展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);
它也没有帮助。
如果有人对此有所了解,我将非常感谢您的帮助。谢谢!
答案 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=""
....
>