如何将Activity中的variables传递给Fragment,并将其传回?

我目前正在做一个Android应用程序,我想在活动和片段之间传递一个date。 我的活动有一个button,打开片段:DatePickerFragment。

在我的活动中,我显示了一个date,我想用这个片段修改。 所以我想把date传递给datepicker,然后把它发回给activity。

我已经尝试了很多解决scheme,但都没有工作。 简单的方法是通过一个论点,但这不能用碎片来完成。

要将信息传递给一个片段 ,创build它时可以设置参数,稍后可以在片段的onCreate或onCreateView方法中检索此参数。

在片段的newInstance函数中,添加要发送给它的参数:

/** * Create a new instance of DetailsFragment, initialized to * show the text at 'index'. */ public static DetailsFragment newInstance(int index) { DetailsFragment f = new DetailsFragment(); // Supply index input as an argument. Bundle args = new Bundle(); args.putInt("index", index); f.setArguments(args); return f; } 

然后在方法onCreate或onCreateView的片段内,你可以像这样检索参数:

 Bundle args = getArguments(); int index = args.getInt("index", 0); 

如果您现在想要从您的片段与您的活动(发送或不发送数据)进行通信 ,则需要使用接口。 您可以这样做的方式在片段之间的通信文档教程中解释得非常好。 由于所有片段之间通过活动相互通信,因此在本教程中,您可以看到如何将数据从实际片段发送到活动容器,以便在活动中使用此数据或将其发送到活动包含的另一个片段。

文档教程:

http://developer.android.com/training/basics/fragments/communicating.html

Activity发送数据到一个Fragment

活动:

 Bundle bundle = new Bundle(); String myMessage = "Stackoverflow is cool!"; bundle.putString("message", myMessage ); FragmentClass fragInfo = new FragmentClass(); fragInfo.setArguments(bundle); transaction.replace(R.id.fragment_single, fragInfo); transaction.commit(); 

分段:

读取片段中的值

 @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { String myValue = this.getArguments().getString("message"); ... ... ... } 

但是如果你想从Fragment发送值到Activity,阅读jpardogo的答案,你必须要有接口,更多的信息: 与其他片段进行通信

使用库EventBus来传递可能包含variables的事件。 这是一个很好的解决scheme,因为它使您的活动和片段松散耦合

https://github.com/greenrobot/EventBus