我正在尝试执行以下操作:
问题是没有调用Activity中的onActivityResult。
以下是我如何展示DialogFragment
DriverRatingDialogFragment dp = new DriverRatingDialogFragment();
// this solution works well in case of showing dialog from a fragment
// but I have to show it from the Activity
// dp.setTargetFragment(getSupportFragmentManager().findFragmentById(R.id.flContent), DriverRatingDialogFragment.REQUEST_CODE);
dp.show(getSupportFragmentManager(), DriverRatingDialogFragment.ARG_RATING);
以下是我尝试从DialogFragment返回结果的方法:
Intent intent = new Intent();
// This solution works well in case of previously setting target Fragment,
// but I have to return result to Activity
// getTargetFragment().onActivityResult(
// getTargetRequestCode(), REQUEST_CODE, intent);
// and with this attempt App crashes
// this.onActivityResult(REQUEST_CODE, Activity.RESULT_OK, intent);
这里是我想要在Activity中检索结果的地方,但它不会被调用:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == DriverRatingDialogFragment.REQUEST_CODE) {
// todo
}
super.onActivityResult(requestCode, resultCode, data);
}
怎么了?
答案 0 :(得分:1)
onActivityResult是在调用startActivityForResult之后接收信息的,这不是你的情况。
您需要从对话框中获取哪些数据?
DialogFragment通常用于片段,而不是活动。查看警报对话框。
答案 1 :(得分:1)
你可以使用回调 1.在你的对话框片段中定义一个回调
public Call mCall;
public interface Call {
void returnData(Data data);
}
2.on对话框片段生命周期
@Override
public void onDetach() {
super.onDetach();
mCall = (Call) getActivity();
mCall.returnData(data);
}
3.activity刚刚实现Call
activity implements DiaFragment.Call
答案 2 :(得分:0)
我以与你相同的方式启动DialogFragment。
CreatePostDialog createPostDialog = new CreatePostDialog();
createPostDialog.show(getSupportFragmentManager(), "create_post_dialog");
我在活动中使用公共方法而不是意图发回数据。
((MainActivity)mContext).logout(Utils.getLocation(v));
上面的代码段是我工作代码的复制粘贴示例。在这种情况下注销是MainActivity中的一个公共方法,它接受一个点并完成它所需要的。