这就是(概念上的)我正在寻找的东西,我发现很难找到答案。如果需要,请询问清楚,但我会尽力而为。
用户单击使用 onClick 方法(以及监听器)的 TextView 以打开对话框 fragment (对话框 fragment 是自定义对话框,并排显示三个数字选择器)。
<用户选择他们想要的号码
用户点击设置按钮(不是取消按钮)
用户选择被反馈到调用 fragment ,并使用 onActivityResult 将值放入 TextView 字段以将值传回调用 fragment 。
用户决定选择另一组数字,因此再次打开对话框。
如何确保用户之前选择的 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/