为了账号安全,请及时绑定邮箱和手机立即绑定

从DialogFragment接收结果

从DialogFragment接收结果

阿波罗的战车 2019-08-15 14:46:27
从DialogFragment接收结果我正在使用DialogFragments做很多事情:从列表中选择项目,输入文本。将值(即字符串或列表中的项)返回给调用活动/片段的最佳方法是什么?目前我正在制作调用活动实现DismissListener,并为DialogFragment提供对活动的引用。然后,Dialog调用OnDimissactivity中的方法,activity将从DialogFragment对象中获取结果。非常混乱,因为DialogFragment失去对活动的引用,它不能用于配置更改(方向更改)。谢谢你的帮助。
查看完整描述

3 回答

?
MM们

TA贡献1886条经验 获得超2个赞

正如您在这里看到的有一种非常简单的方法可以做到这一点。

在你DialogFragment添加一个接口监听器,如:

public interface EditNameDialogListener {
    void onFinishEditDialog(String inputText);}

然后,添加对该侦听器的引用:

private EditNameDialogListener listener;

这将用于“激活”侦听器方法,并检查父Activity / Fragment是否实现此接口(请参阅下文)。

ActivityFragmentActivityFragment说:“所谓的” DialogFragment简单地实现这个接口。

DialogFragment你需要添加的所有内容中,你想要解除DialogFragment并返回结果是:

listener.onFinishEditDialog(mEditText.getText().toString());this.dismiss();

哪里mEditText.getText().toString()是什么将被传递回调用Activity

请注意,如果要返回其他内容,只需更改侦听器所使用的参数即可。

最后,您应该检查接口是否实际由父活动/片段实现:

@Overridepublic void onAttach(Context context) {
    super.onAttach(context);
    // Verify that the host activity implements the callback interface
    try {
        // Instantiate the EditNameDialogListener so we can send events to the host
        listener = (EditNameDialogListener) context;
    } catch (ClassCastException e) {
        // The activity doesn't implement the interface, throw exception
        throw new ClassCastException(context.toString()
                + " must implement EditNameDialogListener");
    }}

这种技术非常灵活,即使您还没有想要解除对话框,也可以回调结果。


查看完整回答
反对 回复 2019-08-15
  • 3 回答
  • 0 关注
  • 707 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信