我的应用程序中“全局对话框”的最佳实践是什么?

马赫迪

我的应用程序中有“自定义”对话框构建器,该构建器将由许多事件触发,例如:Asynctasks,Web服务消息,UI输入错误或没有活动上下文的服务。我总是习惯currentActivity在我的Application类中创建一个Activity 然后在每一份活动的履历表上坐下currentActivity

  @Override
    protected void onResume() {
        super.onResume();
        MyApplication.currentActivity = MainActivity.this;

然后在创建对话框的情况下,我使用了该上下文。但是我有一个问题。例如,我打开了RegisterActivity,然后currentActivity将其更改为它。然后,当应用程序转到后台或某些其他活动打开的情况下,我的应用程序在使用该上下文创建对话框时将崩溃。所以处理女巫活动currentActivity是一件令人头疼的事情我在Google上搜索,发现有些人将CustomDialog嵌入到非布局活动中,然后打开该活动。但这似乎不是很好的解决方案。

更新

例如,我有一个SMSManager类,可以处理所有发送的短信。我想打开对话框,让用户在发送短信之前选择了一些自定义选项。

那么,在我的整个应用程序中,“全局对话框”的最佳实践是什么?

Artkoenig

首先-保存对活动(或Context一般而言)的引用是非常糟糕的做法Android始终为您提供Context可用于创建对话框对象的引用在中,Activity它是对象本身(this),在中,Fragment您可以Context通过-getActivity()getContext()中的View-访问对象getContext()

如果您需要显示自定义类的对话框并且没有Context确保的Context引用,请使用上述方法提供对引用。

在显示任何对话框之前,请不要尝试显示-中的任何对话框Service-确保您的应用位于前台且可见。您可以使用事件总线(或LocalBroadcastManager)将状态(错误,消息或其他内容)发送到当前可见的ActivityFragment在这种情况下,“当前可见的活动或片段”仅是ActivityFragment正在侦听此类事件。开始收听,onStart()然后停止收听onStop()Activity或的方法Fragment如果您不想依靠任何正在运行的活动来显示对话框,并且不想等待用户下次启动您的应用程序,我建议您使用通知而不是对话框。

给定a,Context您可以使用以下帮助程序对话框构建器类在任意位置创建自定义对话框:

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;
    }
}

用法示例(在中Fragment):

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();

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Android Facebook SDK 4.0.1中应用程序请求对话框的新实现是什么

来自分类Dev

模态对话框中活动的全局应用程序菜单(在Linux上)

来自分类Dev

确定我的Node.js应用程序当前在哪个AWS Beanstalk Environment中运行的最佳实践是什么?

来自分类Dev

退出WPF应用程序的最佳实践是什么?

来自分类Dev

由于对话框,我的应用程序崩溃

来自分类Dev

在对话框中使用ViewPager的最佳实践是什么

来自分类Dev

在Web应用程序中处理未知URL的最佳实践是什么?

来自分类Dev

我在对话框片段中单击按钮后,应用程序立即崩溃

来自分类Dev

在我的启动器应用程序中显示当前正在运行的应用程序的对话框

来自分类Dev

wxWidgets中基于对话框的应用程序和基于框架的应用程序有什么区别

来自分类Dev

wxWidgets中基于对话框的应用程序和基于框架的应用程序有什么区别

来自分类Dev

在angular.js应用程序中全局进行错误处理的最佳方法是什么?

来自分类Dev

在angular.js应用程序中全局进行错误处理的最佳方法是什么?

来自分类Dev

在“选择应用程序”对话框列表中显示应用程序

来自分类Dev

将CSS样式应用于我的角度应用程序中的所有Primeng对话框

来自分类Dev

“提升的小部件”对话框中的“全局包含”复选框是什么意思?

来自分类Dev

在Android应用程序中,使用Facebook共享对话框从我的应用程序共享的帖子向我显示,但不向其他人显示。为什么?

来自分类Dev

从在Docker容器中运行的JVM应用程序将日志发送到graylog的最佳实践是什么?

来自分类Dev

客户端应用程序中本地存储管理和数据持久性的最佳实践是什么?

来自分类Dev

在多个环境中使用的 angular4 应用程序中编码 url 的最佳实践是什么?

来自分类Dev

我在Intellij IDEA Ultimate 2016.1的“添加框架支持”对话框中没有“ Web应用程序”

来自分类Dev

在开发阶段保护对公共ASP .NET MVC应用程序的访问的最佳实践是什么?

来自分类Dev

将新的BC引入DDD应用程序的最佳实践是什么?

来自分类Dev

用Spring安全性配置Spring MVC应用程序的最佳实践是什么?

来自分类Dev

在MVC 4应用程序中将Unity与Entity Framework结合使用的最佳实践是什么

来自分类Dev

将应用程序部署为静态或动态构建的最佳实践是什么?

来自分类Dev

Flutter:保存应用程序常规配置的最佳实践是什么?

来自分类Dev

将应用程序部署为静态或动态构建的最佳实践是什么?

来自分类Dev

与主应用程序一起准备iOS演示应用程序的最佳实践是什么?

Related 相关文章

  1. 1

    Android Facebook SDK 4.0.1中应用程序请求对话框的新实现是什么

  2. 2

    模态对话框中活动的全局应用程序菜单(在Linux上)

  3. 3

    确定我的Node.js应用程序当前在哪个AWS Beanstalk Environment中运行的最佳实践是什么?

  4. 4

    退出WPF应用程序的最佳实践是什么?

  5. 5

    由于对话框,我的应用程序崩溃

  6. 6

    在对话框中使用ViewPager的最佳实践是什么

  7. 7

    在Web应用程序中处理未知URL的最佳实践是什么?

  8. 8

    我在对话框片段中单击按钮后,应用程序立即崩溃

  9. 9

    在我的启动器应用程序中显示当前正在运行的应用程序的对话框

  10. 10

    wxWidgets中基于对话框的应用程序和基于框架的应用程序有什么区别

  11. 11

    wxWidgets中基于对话框的应用程序和基于框架的应用程序有什么区别

  12. 12

    在angular.js应用程序中全局进行错误处理的最佳方法是什么?

  13. 13

    在angular.js应用程序中全局进行错误处理的最佳方法是什么?

  14. 14

    在“选择应用程序”对话框列表中显示应用程序

  15. 15

    将CSS样式应用于我的角度应用程序中的所有Primeng对话框

  16. 16

    “提升的小部件”对话框中的“全局包含”复选框是什么意思?

  17. 17

    在Android应用程序中,使用Facebook共享对话框从我的应用程序共享的帖子向我显示,但不向其他人显示。为什么?

  18. 18

    从在Docker容器中运行的JVM应用程序将日志发送到graylog的最佳实践是什么?

  19. 19

    客户端应用程序中本地存储管理和数据持久性的最佳实践是什么?

  20. 20

    在多个环境中使用的 angular4 应用程序中编码 url 的最佳实践是什么?

  21. 21

    我在Intellij IDEA Ultimate 2016.1的“添加框架支持”对话框中没有“ Web应用程序”

  22. 22

    在开发阶段保护对公共ASP .NET MVC应用程序的访问的最佳实践是什么?

  23. 23

    将新的BC引入DDD应用程序的最佳实践是什么?

  24. 24

    用Spring安全性配置Spring MVC应用程序的最佳实践是什么?

  25. 25

    在MVC 4应用程序中将Unity与Entity Framework结合使用的最佳实践是什么

  26. 26

    将应用程序部署为静态或动态构建的最佳实践是什么?

  27. 27

    Flutter:保存应用程序常规配置的最佳实践是什么?

  28. 28

    将应用程序部署为静态或动态构建的最佳实践是什么?

  29. 29

    与主应用程序一起准备iOS演示应用程序的最佳实践是什么?

热门标签

归档