Android:当用户第二次打开对话框时,对话框 fragment 并保留第一次打开对话框时选择的值

标签 android android-alertdialog android-dialogfragment

这就是(概念上的)我正在寻找的东西,我发现很难找到答案。如果需要,请询问清楚,但我会尽力而为。

  1. 用户单击使用 onClick 方法(以及监听器)的 TextView 以打开对话框 fragment (对话框 fragment 是自定义对话框,并排显示三个数字选择器)。

    <
  2. 用户选择他们想要的号码

  3. 用户点击设置按钮(不是取消按钮)

  4. 用户选择被反馈到调用 fragment ,并使用 onActivityResult 将值放入 TextView 字段以将值传回调用 fragment 。

  5. 用户决定选择另一组数字,因此再次打开对话框。

如何确保用户之前选择的 dialogFragment 是创建对话框时显示的内容,而不是将值重置为第一次打开 dialogFragment 时的值?

例如,我是否需要从 TextView 获取值并以某种方式将它们传回 dialogFragment 并在对话框 fragment 中设置值?

任何帮助都会很棒! 谢谢

最佳答案

是的,您需要将参数传递回新对话框以填充字段。这可以通过将参数作为一个包传递给对话框来完成。

您是要存储从对话框的前一个实例接收到的三个值以传回,还是要解析来自 TextView 的值以重新创建它们,这是您的选择(我可能会自己存储这三个值)。

例如:

ExampleDialogFragment df = new ExampleDialogFragment();
Bundle args = new Bundle();
args.putInt("value1", 1);
args.putInt("value2", 2);
args.putInt("value3", 3);
df.setArguments(args);

在对话框的 onCreate() 方法中,您可以使用类似这样的方法来检索值:

int value1 = getArguments().getInt("value1", 0);
int value2 = getArguments().getInt("value2", 0);
int value3 = getArguments().getInt("value3", 0);

一个常见的实现机制是在 DialogFragment 中提供一个 newInstance() 静态方法:

public static ExampleDialogFragment newInstance(int val1, int val2, int val3) {
    ExampleDialogFragment df = new ExampleDialogFragment();
    Bundle args = new Bundle();
    args.putInt("value1", val1);
    args.putInt("value2", val2);
    args.putInt("value3", val3);
    df.setArguments(args);
    return df;
}

这提供了一种创建对话框新实例的简单方法,并隐藏了从客户端传递的参数的内部实现。

要创建对话框 fragment ,您只需使用:

ExampleDialogFragment df = ExampleDialogFragment.newInstance(1,2,3);

关于Android:当用户第二次打开对话框时,对话框 fragment 并保留第一次打开对话框时选择的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28562463/

相关文章:

android - 创建可绘制的弯曲线形状

android - GLES10.glGetIntegerv 在三星设备上返回 0

android - 方向改变事件或监听器 Android

android - 无法在 AlertDialog 中编辑 EditText

android - Bug in a code the buttons 这些按钮什么都不做

java - 乔达 - 打印日期时间忽略时区

android - 有什么方法可以使用 Kotlin Anko Alertdialog 来处理屏幕旋转变化?

android - 使用 lambda 表达式创建一个 AlertDialog

android - DialogFragment 使用接口(interface)回调到 Target Fragment

android - DialogFragment 的简单示例 - 示例代码不适合我