如何监听 DialogFragment 关闭事件

Ram*_*hDR 5 android android-dialogfragment

我已经实现了一个自定义 DialogFragment,我将其显示在 postReviewFragment 中的 RatingBar 评级侦听器事件上,我想在用户关闭对话框时将我的 RatingBar 评级设置回 0。

搜索所以我遇到了这些线程,但解决方案似乎对我不起作用:

DialogFragment 关闭事件

使用自定义对话框时无法使用 onDismiss()

DialogFragment 和 onDismiss

到目前为止我使用上述线程尝试过的内容:

实现DialogInterface.OnDismissListenerpostReviewFragment 和重写onDismiss()方法

   @Override
    public void onDismiss(final DialogInterface dialog) {

        userRating.setRating(0);

    }
Run Code Online (Sandbox Code Playgroud)

另外,在 DialogFragment 中我已经覆盖了该onDismiss()方法

@Override
public void onDismiss(DialogInterface dialog) {
    super.onDismiss(dialog);
    final Fragment parentFragment = getParentFragment();
    if (parentFragment instanceof DialogInterface.OnDismissListener) {
        ((DialogInterface.OnDismissListener) parentFragment).onDismiss(dialog);
    }
}
Run Code Online (Sandbox Code Playgroud)

onDismiss()但当dialogFragment被解除时,该方法仍然没有启动,我做错了什么?

Ram*_*hDR 2

好吧,我设法弄清楚了:

  1. 首先,确保您已DialogInterface.OnDismissListener在 DialogFragment 和显示对话框的 Fragment 上实现并重写 onDismiss() 方法。

  2. 然后,当您显示 DialogFragment 设置目标片段时,这里我通过 Bundle 将评级传递给 DialogFragment

    android.support.v4.app.FragmentManager fm = getActivity().getSupportFragmentManager();
                PostReviewDialogFragment dialog = new PostReviewDialogFragment();
    
                // optionally pass arguments to the dialog fragment
                Bundle args = new Bundle();
                args.putInt("usersRating", rating);
                dialog.setArguments(args);
    
                dialog.setTargetFragment(RestaurantReviewFragment.this,REVIEW_FRAGMENT);
    
    
                dialog.show(fm, TAG);
    
    Run Code Online (Sandbox Code Playgroud)
  3. 在 DialogFraments 的onDismiss()方法中,我将评级设置为 0 并将其添加到意图附加中,并将dialogFragment 中的评级栏设置为用户选择的值。

    Intent i = new Intent()
            .putExtra("rating1", rating);
    getTargetFragment().onActivityResult(getTargetRequestCode(), Activity.RESULT_OK, i);
    
    Run Code Online (Sandbox Code Playgroud)
  4. 然后,我重写onActivityResult()方法来读取值,并在关闭时将片段上的 ratingbar 值设置为 0。

这可能不是最好的方法,但它有效,如果我发现比此方法更好的方法,我将更新答案。如果我的解释不是很清楚,请抱歉,请查看下面的线程以获取更详细的解释。

参考文献: 如何将数据从DialogFragment发送到Fragment?