我已经实现了一个自定义DialogFragment,我在postReviewFragment中的RatingBar评级监听器事件中显示它,我想在用户关闭对话框时将我的RatingBar评级设置回0。
搜索SO我遇到过这些线程,但解决方案似乎对我不起作用:
Can't use onDismiss() when using custom dialogs
到目前为止,我使用上述线程尝试了什么:
在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()
方法仍然没有启动,我做错了什么?
答案 0 :(得分:0)
好的,我设法搞清楚了:
首先确保您已在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并将其添加到intent extra,并将dialogFragment中的ratingbar设置为用户选择的值。
Intent i = new Intent()
.putExtra("rating1", rating);
getTargetFragment().onActivityResult(getTargetRequestCode(), Activity.RESULT_OK, i);
然后我重写onActivityResult()
方法来读取值并在解除时将片段上的ratingbar值设置为0。
这可能不是最好的方法但它有效,如果我找到比这个方法更好的东西,我会更新答案。如果我的解释不是很清楚,请道歉,请查看以下主题以获得更详细的解释。
答案 1 :(得分:-1)
试试这个。
dialog.setOnDismissListener(new DialogInterface.OnDismissListener() {
public void onDismiss(DialogInterface dialog) {
MainActivity.this.finish();
}
});