我正在尝试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
引用并使用Fragment
和DialogFrament
之间的接口,但它运行正常,但我无法检索来自Fragment
的{{1}}使其成功。
有人可以帮忙举个简短的例子吗?
提前致谢
答案 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();
}
});