【问题标题】:DialogFragment with multiple activities具有多个活动的 DialogFragment
【发布时间】:2013-07-31 11:03:14
【问题描述】:

我使用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 并希望得到确认/更好的方法。

【问题讨论】:

  • @gunar 因为它会大大减少我的代码。我有 10 个活动,都需要一个对话片段。

标签: java android android-activity dialogfragment


【解决方案1】:

除了FragmentAlerDialog 活动之外,您还可以在某处定义一个接口(在某处我的意思是 DialogFragment 类中的一个public static interface,或者一个单独的public interface Java 文件),以及任何想要的Activity显示对话框可以实现这个接口。

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

【讨论】:

  • 我试试这个,谢谢!但我不明白你所说的“项目活动”是什么意思?
  • 假设您的项目中有 3 个活动(A、B 和 C)。除了直接从Activity/FragmentActivity 扩展之外,它们还可以从MyRootActivity 扩展,而这可以从Activity/FragmentActivity 扩展。让MyRootActivity 实现你需要的接口,应该就是这样。
【解决方案2】:

我将发布我在代码中所做的编辑,所有功劳归@gunar,

创建新的 DialogImplement.java 为:

package com.example.test;
public interface DialogImplement
{

    public void doPositiveClick();

}

doPositiveClick()执行前的活动代码中添加@Override,例如:

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

}

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-19
    • 2017-06-15
    • 1970-01-01
    相关资源
    最近更新 更多