具有多个活动的DialogFragment

时间:2013-07-31 11:03:14

标签: java android android-activity dialogfragment

我使用documentation here创建了一个对话碎片。代码是:

public static MyAlertDialogFragment newInstance(int title) {
    MyAlertDialogFragment frag = new MyAlertDialogFragment();
    Bundle args = new Bundle();
    args.putInt("title", title);
    frag.setArguments(args);
    return frag;
}

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    int title = getArguments().getInt("title");

    return new AlertDialog.Builder(getActivity())
            .setIcon(R.drawable.alert_dialog_icon)
            .setTitle(title)
            .setPositiveButton(R.string.alert_dialog_ok,
                new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int whichButton) {
                        ((FragmentAlertDialog)getActivity()).doPositiveClick();
                    }
                }
            )
            .setNegativeButton(R.string.alert_dialog_cancel,
                new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int whichButton) {
                        ((FragmentAlertDialog)getActivity()).doNegativeClick();
                    }
                }
            )
            .create();
}}

此处的dialogfragment仅与活动FragmentAlertDialog相关联。有没有办法将它与多个活动联系起来?我在onCreateDialog中通过setArguements()传递我的调用活动名称。有什么方法可以用吗?我检查了this question并希望得到确认/更好的方式。

2 个答案:

答案 0 :(得分:2)

您可以在某个地方定义一个接口(在某处我指的是DialogFragment类中的FragmentAlerDialog,或者单独的public static interface Java文件),而不是public interface活动。希望显示对话框的Activity可以实现此界面。

我使用的一种常见做法是为我的所有项目活动设置一个根Activity。使该根活动实现该接口,然后您可以从任何地方显示DialogFragment

答案 1 :(得分:1)

我将发布我在代码中所做的编辑,所有信用到@gunar,

创建新的DialogImplement.java:

package com.example.test;
public interface DialogImplement
{

    public void doPositiveClick();

}

在实施@Override之前,在活动代码中添加doPositiveClick(),例如:

@Override
public void doPositiveClick() 
{
    //do what you want to do

}

确保您的活动实现DialogImplement,并将问题中的代码修改为:

((DialogImplement)getActivity()).doPositiveClick(); //Or negative click code

希望这会有所帮助。欢呼:]