19

我正在尝试制作一个使用APIFragment来显示。DialogDialogFragment

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

我能够显示来自 的对话框Fragment,但我无法将输入字段中的字符串检索回我的Fragment.

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

关于对话框将事件传回对话框主机的 Android 文档是关于主机始终是一个Activity而不是一个Fragment. 我试图概括在我的案例中使用它的行为,但我不能。

我尝试使用DialogFragment.onAttach回调来获取Activity引用并使用和之间的接口FragmentDialogFrament它工作正常,但我无法Fragment从 中检索Activity以使其工作。

任何人都可以提供一个简短的例子吗?

提前致谢

4

2 回答 2

45

您可以使用 的setTargetFragmentgetTargetFragment方法Fragment。您可以将 your 设置Fragment为 的目标,DialogFragment然后从DialogFragment.

于 2012-12-24T23:43:49.293 回答
3

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

所以在你的对话片段中做这样的事情:

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();
    }
});
于 2012-12-24T23:37:04.437 回答