如何监听DialogFragment的dismiss事件

5
我已经实现了一个自定义的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个回答

2

好的,我成功地解决了它:

  1. First of all make sure you've implemented DialogInterface.OnDismissListener and overriden onDismiss() method on both DialogFragment and the Fragment showing the dialog.

  2. Then when you show the DialogFragment set a target fragment, here I pass the rating via a Bundle to the 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. On DialogFraments's onDismiss() method I set the rating to 0 and add it to an intent extra and set ratingbar in dialogFragment to user selected value.

    Intent i = new Intent()
            .putExtra("rating1", rating);
    getTargetFragment().onActivityResult(getTargetRequestCode(), Activity.RESULT_OK, i);
    
  4. Then I override onActivityResult() method to read the values and set ratingbar value on the fragment to 0 when dismissed.

这可能不是最佳方法,但它可以工作。如果我找到比这种方法更好的方法,我会更新答案。如果我的解释不太清楚,请查看下面的线程以获取更详细的解释。

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


-1

使用可用的OnDismissListener

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

这是危险的,因为它会覆盖DialogFragments内部的dismiss监听器。 - M. Smith

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接