Android: Dialog fragments 并在用户第二次打开dialog时保留第一次打开dialog时选择的值

Android: Dialog fragments and retaining the values selected the first time the dialog is opened when the user opens the dialog for a second time

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

  1. 用户单击使用 onClick 方法(以及侦听器)的 TextView 打开对话框片段(对话框片段是带有并排三个数字选择器的自定义对话框)。

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

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

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

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

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

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

任何帮助都会很棒! 谢谢

当您启动 DialogFragment:

DialogFragment myFragment = new DialogFragment();
Bundle args = new Bundle();
args.putInt("number1", a);
args.putInt("number2", b);
args.putInt("number3", c);
myFragment.setArguments(args);

DialogFragment里面 class:

Bundle args = getArguments();
if(args == null){

    // do nothing; this is the first time the user is opening this Dialog
}
else{

    int a = args.getInt("number1");
    int b = args.getInt("number2");
    int c = args.getInt("number3");

    // initialize number pickers

}

试试这个。这会起作用。

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

您是要存储从对话框的前一个实例接收到的三个值以传回,还是要解析来自 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;
}

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

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

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