我有一个活动,如果第一次启动,显示欢迎信息:
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); showWelcomeMessageIfNecessary(); } private void showWelcomeMessageIfNecessary() { final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); final Editor edit = prefs.edit(); if (!prefs.getBoolean("welcomemessage",false)) { edit.putBoolean("welcomemessage",true); edit.commit(); AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setMessage(R.string.messages_welcome_content).setCancelable(false).setPositiveButton(R.string.errors_ok,new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog,int id) { // Do nothing } }).setTitle(R.string.messages_welcome_title); AlertDialog alert = builder.create(); alert.show(); } }
这一切都很美妙,但是当我启动应用程序,并立即旋转屏幕,我得到了众所周知的泄漏窗口异常.
我该如何防止这种情况?有更好的方式来显示对话吗?当我在Fragments中的AsyncTasks中使用ProgressDialogs时也会发生这种情况.
解决方法
您需要在活动的onStop或onDestroy方法中取消对话框.例如:
private AlertDialog diag = null; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); diag = showWelcomeMessageIfNecessary(); if(diag != null) diag.show(); } private AlertDialog showWelcomeMessageIfNecessary() { final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); final Editor edit = prefs.edit(); AlertDialog alert = null; if (!prefs.getBoolean("welcomemessage",int id) { // Do nothing } }).setTitle(R.string.messages_welcome_title); alert = builder.create(); } return alert; } @Override protected void onStop() { super.onStop(); if(diag != null) diag.dismiss(); }
原文地址:https://www.jb51.cc/android/311702.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。