【问题标题】:How can I re use my alert DialogFragment for a result?如何重新使用我的警报 DialogFragment 以获得结果?
【发布时间】:2013-12-13 00:45:23
【问题描述】:

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

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

现在我想在我的活动中将这个片段重新用于 3 个不同的“弹出”选择列表。对于三个按钮中的每一个,我都需要确定调用按钮,以确定在选择列表中的项目时要执行的操作。

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

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

【问题讨论】:

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


    【解决方案1】:

    我认为实现目标的最简单方法可能是在 DialogFragment 中设置三个不同的侦听器,然后为每个侦听器设置设置器。然后,当您将警报对话框构建为片段时,您可以定义每个侦听器的 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 方法,但这就是它的要点。

    【讨论】:

    • 嗨,韦斯,我正在使用像这样的接口 public interface testDialogListener { public void onDialogClick(DialogFragment dialog, int which); }
    • 我应该使用您指定的 DialogInterface.OnClickListener (s)(mListener1 等)而不是自定义的,然后为每个实现内置 onClick 方法吗?
    • 当我尝试执行上述操作时,我遇到了问题 - 最终 YourDialogFragment.OnClickListener 已通过Listener。我最终回到尝试创建自己的界面:/
    • 我终于有机会坐下来深入研究并解决它。谢谢。
    • 抱歉回复晚了,我在偏远地区不在状态。很高兴你解决了:)
    【解决方案2】:

    我建议您显示另一个片段中的对话片段,您可以在其中实现 onClick 侦听器并使用setTargetFragment() 告诉对话片段它正在与谁一起工作..

    dialogFragment.setTargetFragment(this, 0);
    

    并使用getTargetFragment() 从DialogFragment 中获取父片段。

    这里是示例程序中的一些代码 sn-ps..

           // Retrieve the progress bar from the target's view hierarchy.
           mProgressBar = (ProgressBar)getTargetFragment().getView().findViewById(
                    R.id.progress_horizontal);
    

    您还可以在 onCreate() 方法中使用setRetainInstance(true) 来告诉框架在配置更改期间尝试保留此片段

    请参阅this answer 了解更多信息,希望对您有所帮助..

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-06
      • 1970-01-01
      • 2021-07-17
      • 1970-01-01
      相关资源
      最近更新 更多