我最近在我的Activity中创建了一个标准列表DialogFragment来构建一个AlertDialog,可以看作是这里的答案:
What is the best way to recreate an AlertDialog when the screen is rotated?
现在我想在我的活动中为这个片段重新使用3个不同的“Pop Up”选择列表。对于三个按钮中的每一个,我需要识别调用按钮,以确定选择列表中的项目时要采取的操作。
实现这一目标的最佳方法是什么?
目前我认为我需要将调用按钮ID传递给DialogFragment,然后在对话框完成时将其传递回活动结果。有没有更好的方法来实现这一目标?
答案 0 :(得分:0)
我认为实现你想要的最简单的方法可能是在DialogFragment中有三个不同的监听器,然后为每个监听器设置setter。然后,当您将警报对话框构建为片段时,您可以定义每个侦听器的onClick方法在调用方法中将执行的操作。所以像这样:
protected DialogInterface.OnClickListener mListener1;
protected DialogInterface.OnClickListener mListener2;
protected DialogInterface.OnClickListener mListener3;
public void setListener1(final YourDialogFragment.OnClickListener passedListener) {
mListener1 = new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
listener.onClick(getActivity(), dialog, which);
}
};
}
然后在调用DialogFragment的代码内部调用类似:
的内容// Building the Dialog Fragment here
YourDialogFragment.setListener1(new YourDialogFragment.OnClickListener() {
@Override
public void onClick(FragmentActivity activity, DialogInterface dialog, int which) {
// Whatever you want to happen when you click goes here
}
});
理想情况下,您可以使用某些辅助函数来获取参数,这样您就不会从活动中显式调用set方法,但这就是它的要点。
答案 1 :(得分:0)
我建议您显示另一个片段中的对话框片段,您可以在其中实现onClick侦听器,并使用setTargetFragment()告诉对话框片段它正在使用谁..
dialogFragment.setTargetFragment(this, 0);
并使用getTargetFragment()从DialogFragment获取父片段。
以下是示例程序中的一些代码片段。
// Retrieve the progress bar from the target's view hierarchy.
mProgressBar = (ProgressBar)getTargetFragment().getView().findViewById(
R.id.progress_horizontal);
此外,您还可以在onCreate()方法中使用setRetainInstance(true)告诉框架在配置更改期间尝试保留此片段
请参阅this answer以获取更多信息,希望这会有所帮助..