最近,我创建了一个标准列表DialogFragment,用于在我的活动中构建一个AlertDialog,这可以看作是这里的答案:
当屏幕旋转时,重新创建AlertDialog的最佳方法是什么?
现在,我想在我的活动中为3种不同的"Pop Up“选择列表重用这个片段。对于这三个按钮中的每一个,我需要标识调用按钮,以确定在选择列表中的项时要采取的操作。
实现这一目标的最佳途径是什么?
目前,我认为我需要将调用按钮ID传递给DialogFragment,然后在对话框完成时将其传递回活动并得到结果。是否有更好的方法来实现这一目标?
发布于 2013-12-12 17:05:21
我认为实现您所要实现的目标的最简单的方法可能是在您的DialogFragment中只包含三个不同的侦听器,然后每个都有设置器。然后,当您将警报对话框构建为一个片段时,您可以定义每个侦听器在调用方法中的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方法,但这才是其中的要点。
发布于 2013-12-12 20:55:17
我建议您从另一个片段中显示对话框片段,在其中您可以实现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);
还可以在setRetainInstance(真) ()方法中使用onCreate()方法告诉框架,在配置更改时尽量保留此片段。
看这个答案得到更多的想法,希望这有帮助..。
https://stackoverflow.com/questions/20557192
复制相似问题