我使用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并希望得到确认/更好的方式。
答案 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
希望这会有所帮助。欢呼:]