我目前正在制作一个 Android 应用程序,我想在活动和片段之间传递一个日期。 我的活动有一个按钮,用于打开片段:DatePickerFragment.
在我的活动中,我显示了一个日期,我想用片段修改这个日期。因此,我想将日期传递给日期选择器,然后将其发送回活动。
我尝试了很多解决方案,但都行不通。最简单的方法是传递一个参数,但片段无法做到这一点。
要向片段传递信息,可在创建片段时设置参数(setArguments),之后可在片段的 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
活动:
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");
...
...
...
}
但是,如果您想从片段向活动发送值,请阅读 jpardogo 的回答,您必须需要接口,更多信息请参见:与其他片段通信:[与其他片段通信][1]
使用 EventBus 库来回传递可能包含变量的事件。 这是一个很好的解决方案,因为它能使您的活动和片段保持松散耦合。