我的应用程序中有“自定义”对话框构建器,该构建器将触发许多事件,例如:Asynctasks,Web服务消息,UI输入错误或不具有活动上下文的服务.我总是在我的Application类中创建一个称为currentActivity的Activity.然后,在每项活动的恢复中,他们都坐在currentActivity上.
@OverrIDe protected voID onResume() { super.onResume(); MyApplication.currentActivity = MainActivity.this;
然后在创建对话框的情况下,我使用该上下文.但是我有一个问题.例如,我打开了Registeractivity,然后将currentActivity更改为它.然后,当应用程序进入后台或某些其他活动打开的情况下,我的应用程序在使用该上下文创建对话框时将崩溃.因此处理女巫活动是当前活动是一件令人头疼的事情.我在Google上搜索,发现有些人将CustomDialog嵌入到非布局活动中,然后打开该活动.但这似乎不是很好的解决方案.
更新
例如,我有一个SMSManager类,可以处理所有发送的短信.我想打开对话框,让用户在发送短信之前选择了一些自定义选项.
那么在我的整个应用程序中,“全局对话框”的最佳实践是什么?
解决方法:
首先-保存对活动(或通常为Context)的引用是非常不好的做法. AndroID始终为您提供可用于创建对话框的Context对象的引用.在一个Activity中,它就是对象本身(this),在一个Fragment中,您可以通过VIEw-getContext()中的getActivity()或getContext()访问Context.
如果您需要显示自定义类中的对话框并且没有对Context的引用,请确保使用上述方法为您的类提供Context引用.
不要尝试显示“服务”中的任何对话框-在显示任何对话框之前,请确保您的应用位于前台且可见.您可以使用事件总线(或LocalBroadcastManager)将状态(错误,消息等)发送到当前可见的Activity或Fragment.在这种情况下,“当前可见的活动或片段”只是侦听此类事件的活动或片段.开始监听onStart()并停止监听Activity或Fragment的onStop()方法.如果您不想依靠任何正在运行的活动来显示对话框,并且不想等待用户下次启动您的应用程序,我建议您使用notifications代替对话框.
在给定上下文的情况下,可以使用以下帮助器对话框构建器类在任意位置创建自定义对话框:
public class DialogBuilder { private String Title; private String message; private String primarybuttonTitle; private String secondarybuttonTitle; private Dialog.OnClickListener primarybuttonListener; private Dialog.OnClickListener secondarybuttonListener; private Activity context; private boolean showIcon; private boolean cancellable; public DialogBuilder(Activity context) { this.context = context; } public DialogBuilder setTitle(@StringRes int Title) { this.Title = context.getString(Title); return this; } public DialogBuilder setTitle(String Title) { this.Title = Title; return this; } public DialogBuilder setMessage(@StringRes int message) { this.message = context.getString(message); return this; } public DialogBuilder setMessage(String message) { this.message = message; return this; } public DialogBuilder setShowIcon() { showIcon = true; return this; } public DialogBuilder setPrimarybutton(@StringRes int Title, Dialog.OnClickListener Listener) { primarybuttonTitle = context.getString(Title); primarybuttonListener = Listener; return this; } public DialogBuilder setSecondarybutton(@StringRes int Title, Dialog.OnClickListener Listener) { secondarybuttonTitle = context.getString(Title); secondarybuttonListener = Listener; return this; } public DialogBuilder setCancellable(boolean cancellable) { this.cancellable = cancellable; return this; } public AlertDialog create() { AlertDialog.Builder builder = new AlertDialog.Builder(context); VIEw dialogVIEw = LayoutInflater.from(context).inflate(R.layout.my_custom_dialog, null); builder.setVIEw(dialogVIEw); // get your custom vIEws here and configure them based on given settings (fIEld values of this class) final AlertDialog dialog = builder.create(); return dialog; }}
用法示例(在片段中):
new DialogBuilder(getActivity()) .setTitle(R.string.Title) .setMessage(R.string.message) .setPrimarybutton(R.string.ok, new DialogInterface.OnClickListener() { @OverrIDe public voID onClick(DialogInterface dialog, int which) { // do something dialog.dismiss(); } }) .setSecondarybutton(R.string.settings_cancel, new DialogInterface.OnClickListener() { @OverrIDe public voID onClick(DialogInterface dialog, int which) { // do something dialog.dismiss(); } }).create().show();
总结 以上是内存溢出为你收集整理的android-在我的应用程序中全局对话框的最佳实践是什么全部内容,希望文章能够帮你解决android-在我的应用程序中全局对话框的最佳实践是什么所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)