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

时间:2015-02-17 13:17:58

标签: android android-alertdialog android-dialogfragment

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

  1. 用户点击TextView,它使用onClick方法(连同监听器)打开对话框片段(对话框片段是自定义对话框,并排有三个数字选择器)。

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

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

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

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

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

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

    任何帮助都会很棒! 感谢

2 个答案:

答案 0 :(得分:1)

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

是否要将从对话框的前一个实例接收的三个值存储为传回,或者从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);

答案 1 :(得分:0)

当你开始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班级内:

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

}

试试这个。这将有效。