如何将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,因为它使您的活动和片段松散耦合