谷歌建议我们使用DialogFragment,而不是用Fragments API来表示简单的Dialog,但用DialogFragment来表示简单的是非确认消息框是荒谬的.在这种情况下,最佳做法是什么?

推荐答案

是的,使用DialogFragment,而在onCreateDialog中,你可以简单地使用AlertDialog builder创建一个带有Yes/No确认按钮的简单AlertDialog.没有太多的代码.

关于处理片段中的事件,有各种各样的方法,但我只是在我的Fragment中定义了一个消息Handler,通过它的构造函数将其传递到DialogFragment,然后将消息作为各种点击事件的适当方式传递回片段的处理程序.同样,有各种各样的方法可以做到这一点,但下面的方法对我来说很有效.

在对话框中保存一条消息并在构造函数中实例化:

private Message okMessage;
...
okMessage = handler.obtainMessage(MY_MSG_WHAT, MY_MSG_OK);

在对话框中实现onClickListener,然后根据需要调用处理程序:

public void onClick(.....
    if (which == DialogInterface.BUTTON_POSITIVE) {
        final Message toSend = Message.obtain(okMessage);
        toSend.sendToTarget();
    }
 }

Edit

由于Message是可包裹的,所以你可以在onSaveInstanceState中保存并恢复它

outState.putParcelable("okMessage", okMessage);

然后在onCreate

if (savedInstanceState != null) {
    okMessage = savedInstanceState.getParcelable("okMessage");
}

Android相关问答推荐

带有kSP而不是kapt的Hilt

编写Inbox需要具有匹配兼容性的Kotlin版本

我到底应该如何分享我的应用程序中的图片?

这款应用与最新版本的Android不兼容.在Android 14中

每次重启Android时预填入Room数据库

从未设置实时数据值

Android在NavHost中的LazyColumn中编写约束布局:error - replace()在未放置的项目上调用

Kotlin为多个控件设置一个侦听器

空数据来自改装

如何防止在Android Studio中设置kotlin断点时优化变量

Android Studio Relay插件(版本0.3.07)错误

更改当前活动并返回后,Android webview 滚动不起作用

我如何比较多个时间范围并在 Android Compose 中并排显示它们

我的自定义小吃店不适合我的全宽屏幕尺寸

如何添加到先前预填充的 Room 数据库?

Jetpack Compose 动画的行为是什么?

当包含可绘制对象的整数变量传递给 painterResource 函数时,为什么图像不在 Android Studio 中呈现?

java.lang.String 类型的值 Forbidden 无法转换为 JSONObject

Android 自动分页如何与 media3 配合使用?

Jetpack Compose:对角拆分卡片并将内容放入其中