Android DialogFragment vs Dialog

标签 android android-fragments android-dialog android-dialogfragment

Google 建议我们通过 Fragments API 使用 DialogFragment 而不是简单的 Dialog,但是使用孤立的 是很荒谬的>DialogFragment 用于一个简单的 Yes-No 确认消息框。在这种情况下,最佳做法是什么?

最佳答案

是的,使用 DialogFragment 并且在 onCreateDialog 中你可以简单地使用 AlertDialog 构建器来创建一个简单的 AlertDialog 带有是/否确认按钮.根本没有太多代码。

关于处理 fragment 中的事件,有多种方法可以做到,但我只是在我的 Fragment 中定义一个消息 Handler,将其传递到 DialogFragment 通过其构造函数,然后将消息传递回我的 fragment 的处理程序,作为对各种单击事件的适当处理。同样有多种方法可以做到这一点,但以下方法对我有用。

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

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

编辑

由于 Message 是可打包的,您可以将其保存在 onSaveInstanceState 中并恢复它

outState.putParcelable("okMessage", okMessage);

然后在onCreate

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

关于Android DialogFragment vs Dialog,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7977392/

相关文章:

android - 打开另一个对话框 fragment 并关闭前一个

Android:如何将 CheckBox 文本重心设置为整个控件的中心?

android - 返回时如何刷新 fragment UI

java - 如何通过单击 ListView 中的项目转到另一个 fragment ?

android - 在对话框边界外查看

android - API 级别 < 8 的 Dialog.setOnShowListener() 替代方案

android - 在应用程序退出时保存 Android 应用程序数据

java - 如何设置定时器,即使App关闭?

android - Facebook - Android 授权应用程序错误

java - 防止在设备旋转时重新创建 Android fragment