如何收听DialogFragment dismiss事件

时间:2016-09-30 14:58:25

标签: android android-dialogfragment

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

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

DialogFragment Close Event

Can't use onDismiss() when using custom dialogs

DialogFragment and onDismiss

到目前为止,我使用上述线程尝试了什么:

在postReviewFragment上实现DialogInterface.OnDismissListener并覆盖onDismiss()方法

   @Override
    public void onDismiss(final DialogInterface dialog) {

        userRating.setRating(0);

    }

同样在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);
    }
}

但是当关闭dialogFragment时,onDismiss()方法仍然没有启动,我做错了什么?

2 个答案:

答案 0 :(得分:0)

好的,我设法搞清楚了:

  1. 首先确保您已在DialogFragment和显示对话框的片段上实现DialogInterface.OnDismissListener并覆盖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);
    
  3. 在DialogFraments的onDismiss()方法中,我将评级设置为0并将其添加到intent extra,并将dialogFragment中的ratingbar设置为用户选择的值。

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

  5. 这可能不是最好的方法但它有效,如果我找到比这个方法更好的东西,我会更新答案。如果我的解释不是很清楚,请道歉,请查看以下主题以获得更详细的解释。

    参考文献:How to send data from DialogFragment to a Fragment?

答案 1 :(得分:-1)

试试这个。

dialog.setOnDismissListener(new DialogInterface.OnDismissListener() {
                    public void onDismiss(DialogInterface dialog) {
                        MainActivity.this.finish();
                    }
                });