Fragment和DialogFragment之间的通信

时间:2012-12-24 23:31:25

标签: android android-fragments android-alertdialog

我正在尝试Fragment使用DialogFragment API显示Dialog

我的对话框只有一个EditText视图,我想将写在其上的字符串传递回Fragment

我可以显示Fragment的对话框,但我无法将输入字段中的字符串检索回Fragment

我尝试了两种方法来创建对话框:覆盖DialogFragment.onCreateView方法并编写整个对话框的视图并覆盖DialogFragment.onCreateDialog并使用AlertDialog.Builder以便更轻松地编写按钮行为。

关于对话框passing events back to dialog's host的Android文档是关于主机始终是Activity而永远不是Fragment。我试图概括在我的情况下使用它的行为,但我不能。

我尝试使用DialogFragment.onAttach回调来获取Activity引用并使用FragmentDialogFrament之间的接口,但它运行正常,但我无法检索来自Fragment的{​​{1}}使其成功。

有人可以帮忙举个简短的例子吗?

提前致谢

2 个答案:

答案 0 :(得分:43)

您可以使用Fragment的{​​{3}}和setTargetFragment方法。您可以将Fragment设置为DialogFragment的目标,然后从DialogFragment中检索对其的引用。

答案 1 :(得分:5)

你可以使用回调。只需在对话框片段中实现一个“完成”按钮或类似的东西。

所以在你的dialogfragment中做这样的事情:

protected OnDialogClickedListener callback = null;

public interface OnDialogClickedListener {
    public abstract void onDialogClicked(int position);
}

public void setOnDialogClickedListener(OnDialogClickedListener l){
    callback = l;
}

button.setOnItemClickListener(new OnItemClickListener() {
    public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
        callback.onDialogClicked(position);
        dismiss();
    }
});

在您的活动中执行以下操作:

final YourFragment f = YourFragment .newInstance(0);
f.show(ft, "YourFragment ");
f.setOnDialogClickedListener(new OnDialogClickedListener() {
    @Override
    public void onDialogClicked(int position) {
        updateText(position);
        f.dismiss();
    }
});