Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何侦听DialogFragment事件_Android_Android Dialogfragment - Fatal编程技术网

Android 如何侦听DialogFragment事件

Android 如何侦听DialogFragment事件,android,android-dialogfragment,Android,Android Dialogfragment,我已经实现了一个自定义的DialogFragment,我正在postReviewFragment中的RatingBar rating listener事件中显示它,我想在用户取消对话框时将RatingBar rating设置回0 正在搜索,因此我遇到了这些线索,但解决方案似乎不适合我: 到目前为止,我使用上述线程进行了尝试: 在postReviewFragment上实现DialogInterface.OnDismissListener,并重写onDismiss()方法 @Overri

我已经实现了一个自定义的DialogFragment,我正在postReviewFragment中的RatingBar rating listener事件中显示它,我想在用户取消对话框时将RatingBar rating设置回0

正在搜索,因此我遇到了这些线索,但解决方案似乎不适合我:

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

在postReviewFragment上实现DialogInterface.OnDismissListener,并重写
onDismiss()
方法

   @Override
    public void onDismiss(final DialogInterface dialog) {

        userRating.setRating(0);

    }
@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()
方法

   @Override
    public void onDismiss(final DialogInterface dialog) {

        userRating.setRating(0);

    }
@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()
方法仍然没有启动,我做错了什么?

使用可用的方法


好的,我设法弄明白了:

  • 首先,确保您已经在DialogFragment和显示对话框的片段上实现了
    DialogInterface.OnDismissListener
    并重写了onDismiss()方法

  • 然后,当您将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);
    
  • 在DialogFraments的
    onDismiss()
    方法中,我将评级设置为0,并将其添加到一个额外的意图中,并将dialogFragment中的评级栏设置为用户选择的值

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

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


    参考资料:

    这是危险的,因为它会覆盖对话侦听器