将数据从dialogfragment传递到片段

时间:2013-08-12 22:25:19

标签: android android-intent fragment dialogfragment

我得到了一个包含三个片段的活动,并从其中一个片段中调用MyDialogFragment.show()方法。出现对话框,我做了一些文本输入并尝试将此文本输入传递回片段。到目前为止一切都很好。

我通过'parent'片段的onActivityResult()与set / getTargetFragment() - 调用(见下面的代码)建立了反向通信。我确实在我的父片段中得到了结果,但我无法传递一些数据。每次尝试创建意图并在其中放入一些额外数据都会失败。我不知道我是盲人还是这样......但是我不能在onClick()方法中创建一个意图吗?!

任何帮助表示赞赏!

在我的对话框片段中:

public Dialog onCreateDialog(Bundle savedInstanceState) {
    AlertDialog.Builder builder = new AlertDialog.Builder(getParentFragment().getActivity());
    LayoutInflater inflater = getActivity().getLayoutInflater();
    builder.setView(inflater.inflate(R.layout.dialog_choose_title, null));

    builder.setTitle(mTitle)
            .setPositiveButton(R.string.dialog_save_title, new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    Intent intent = new Intent(getParentFragment().getActivity(), MyMainClass.class);
                    intent.putExtra("title", mEditText.getText().toString());
                    getTargetFragment().onActivityResult(getTargetRequestCode(), Activity.RESULT_OK, intent);
                    dismiss();
                }
            })
            .setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    dismiss();
                }
            });
    return builder.create();
}

在我的片段中:

public void onClick(View v) {
            ChooseTitleDialog dialog = ChooseTitleDialog.newInstance(mTimerObject.getmTitle());
            dialog.setTargetFragment(mThis, 42);
            dialog.show(mFragmentMgr, "choose_title_dialog");
        }

1 个答案:

答案 0 :(得分:0)

我有点失明! 在创建意图和思考正确的上下文(getActivity(),getParentFragment()。getActivity(),...)或其他创建回调到我的片段的可能性时,我不会浪费第二个思考错误的其他一些原因。所以我尝试从(mEditText)获取文本的EditText-Element没有初始化:\

使其有效的一些修改:

View v = inflater.inflate(R.layout.dialog_choose_title, null);
mEditText = (EditText) v.findViewById(R.id.id_edit_choose_title);
mEditText.setText(mTitle);
builder.setView(v);

感谢你的时间Gokhan!