这是(概念上)我正在寻找的东西,我发现很难找到答案。如果需要请询问清楚,但我会尽力。
用户点击TextView,它使用onClick方法(连同监听器)打开对话框片段(对话框片段是自定义对话框,并排有三个数字选择器)。
用户选择他们想要的号码
用户点击设置按钮(不是取消按钮)
用户选择反馈到调用片段,并使用onActivityResult放入TextView字段,将值传递回调用片段。
用户决定选择另一组数字,因此再次打开对话框。
如何确保用户之前的dialogFragment选择是在创建对话框时显示的内容,而不是将值重置为第一次打开dialogFragment时的值?
例如,我是否需要从TextView中获取值并以某种方式将它们传递回dialogFragment并在对话框片段中设置值?
任何帮助都会很棒! 感谢
答案 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
}
试试这个。这将有效。