4

我使用这里的文档来创建一个对话片段。代码是:

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() 传递调用活动名称。有什么方法可以使用吗?我检查了这个问题,并希望得到确认/更好的方法。

4

2 回答 2

3

FragmentAlerDialog您可以在某处定义一个接口(我的意思是public static interface在 DialogFragment 类或单独的public interfaceJava 文件中的某处) ,而不是有一个活动,并且任何Activity希望显示对话框的人都可以实现这个接口。

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

于 2013-07-31T11:12:07.467 回答
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

希望这会有所帮助..干杯:]

于 2013-08-01T12:24:23.563 回答