从DialogFragment传递数据到Fragment

4
我有一个带有三个片段的活动,并从其中一个片段调用MyDialogFragment.show()方法。对话框出现后,我进行一些文本输入并尝试将此文本输入传回到片段。到目前为止还不错。
我通过 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");
        }

你正在dialog-fragment中创建意图,你在哪里读取它? - Gokhan Arik
哦,抱歉。我没有表述清楚。当我尝试添加一些数据时,我已经遇到了NPE。因此,创建似乎失败了。 - mauricemoss
你能发布一下Logcat错误吗? - Gokhan Arik
有时候,你就是看不到显而易见的东西,直到再次被推到它面前才能看到。mEditText-TextView 是另一个实现中的一些遗留物,我就是没想明白。 - mauricemoss
我想我应该删除这个问题,对吧?它与问题完全没有关系。 - mauricemoss
你不需要删除任何内容,只需清晰地表达你的问题。发布你的错误代码,告诉我们哪一行出错了。提问容易回答难。此外,我们没有完整的代码,试图在不运行它的情况下找出问题也很困难。 - Gokhan Arik
1个回答

0

我有点糊涂了! 在创建意图并考虑正确的上下文(getActivity(),getParentFragment().getActivity(),...)或其他可能性来创建回调到我的片段时,我没有浪费一秒钟去考虑错误的其他原因。所以我尝试从中获取文本的EditText元素(mEditText)未初始化:\

进行一些修改使其正常工作:

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!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接