将结果从DialogFragment返回到Activity

时间:2016-06-22 17:24:16

标签: android

我正在尝试执行以下操作:

  1. 显示来自活动(不是片段)的对话框片段;
  2. 在活动中检索结果。
  3. 问题是没有调用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);
        }
    

    怎么了?

3 个答案:

答案 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中的一个公共方法,它接受一个点并完成它所需要的。