从DialogFragment接收结果

从DialogFragment接收结果

我正在使用DialogFragments做很多事情:从列表中选择项目,输入文本。

将值(即字符串或列表中的项)返回给调用活动/片段的最佳方法是什么?

目前我正在制作调用活动实现DismissListener,并为DialogFragment提供对活动的引用。然后,Dialog调用OnDimissactivity中的方法,activity将从DialogFragment对象中获取结果。非常混乱,因为DialogFragment失去对活动的引用,它不能用于配置更改(方向更改)。

谢谢你的帮助。


阿波罗的战车
浏览 722回答 3
3回答

MM们

正如您在这里看到的,有一种非常简单的方法可以做到这一点。在你DialogFragment添加一个接口监听器,如:public interface EditNameDialogListener {     void onFinishEditDialog(String inputText);}然后,添加对该侦听器的引用:private EditNameDialogListener listener;这将用于“激活”侦听器方法,并检查父Activity / Fragment是否实现此接口(请参阅下文)。在Activity/ FragmentActivity/ Fragment说:“所谓的” 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");     }}这种技术非常灵活,即使您还没有想要解除对话框,也可以回调结果。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Android