如何重新使用我的警报DialogFragment获得结果?

时间:2013-12-13 00:45:23

标签: android android-fragments android-lifecycle android-dialogfragment

我最近在我的Activity中创建了一个标准列表DialogFragment来构建一个AlertDialog,可以看作是这里的答案:

What is the best way to recreate an AlertDialog when the screen is rotated?

现在我想在我的活动中为这个片段重新使用3个不同的“Pop Up”选择列表。对于三个按钮中的每一个,我需要识别调用按钮,以确定选择列表中的项目时要采取的操作。

实现这一目标的最佳方法是什么?

目前我认为我需要将调用按钮ID传递给DialogFragment,然后在对话框完成时将其传递回活动结果。有没有更好的方法来实现这一目标?

2 个答案:

答案 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以获取更多信息,希望这会有所帮助..