繁体   English   中英

不使用活动在两个片段之间传递数据

[英]Pass data between two fragments without using activity

我想在不使用活动和片段活动的情况下在两个片段之间传递数据。

我不想使用以下活动在片段之间传递数据: 与其他片段进行通信

以下是我的情景:

我有一个Parent片段,里面有两个子片段。现在我需要在这两个片段之间传递数据。如何实现这一点?

我调查了这个: 事件总线,但没有得到片段的工作示例。

在片段之间传递数据还有其他选择吗?

任何帮助将不胜感激。

根据InnocentKiller的回答编辑:

在FragmentOne中,我实现了:

    FragmentTwo = new FragmentTwo();
    Bundle bundle = new Bundle();
    bundle.putString("Hello", "My name is Siddharth");
    fragment.setArguments(bundle);

在FragmentTwo中,我实现了:

    Bundle bundle = this.getArguments();
    String myInt = bundle.getString("Hello","Test");
    mStartTripButton.setText(myInt);

在活动/片段,片段/片段/,活动/活动,类/类之间交换数据的最佳方式,使得常见的单例类如下:

public class DataHolderClass {
private static DataHolderClass dataObject = null;

private DataHolderClass() {
    // left blank intentionally
}

public static DataHolderClass getInstance() {
    if (dataObject == null)
        dataObject = new DataHolderClass();
    return dataObject;
}
private String distributor_id;;

 public String getDistributor_id() {
    return distributor_id;
 }

 public void setDistributor_id(String distributor_id) {
    this.distributor_id = distributor_id;
 }
}

在移动到新屏幕之前,现在可以在任何位置(片段,活动,类)进行设置

DataHolderClass.getInstance().setDistributor_id("your data");

现在到处都是(片段,活动,班级)

 String _data = DataHolderClass.getInstance().getDistributor_id();

您可以使用EventBus https://github.com/greenrobot/EventBus在Android中传递任何复杂对象。

将对象从一个Activity传递到另一个Activity的示例:

在EventBus上添加您的对象:

EventBus.getDefault().postSticky(anyObject);
startActivity(new Intent(getActivity(), SomeActivity.class));

SomeActivity中的任何地方:

AnyObject anyObject = EventBus.getDefault().getStickyEvent(AnyObject.class);

此测试只是为了表明它可以跨活动工作,您可以调用getStickyEvent在代码中的任何位置获取anyObject。

因此,您可以在Fragment A中发布一个对象,并使用片段B中的getStickyEvent来检索它。

如果您希望从一个地方移动到另一个地方有很多参数和/或复杂对象,这将非常方便。 只需创建一个包含参数的getter / setter的“holder”对象,然后传递它。 比分别传递它们并以某种方式序列化复杂对象要简单得多。

我想你正试图将数据从一个片段传递到另一个片段,所以尝试使用下面的代码。

使用Bundle,所以在下面的代码中写下你要发送数据的第一个片段。

Fragment fragment = new Fragment();
Bundle bundle = new Bundle();
bundle.putString("message", "From Activity");
fragment.setArguments(bundle);

要检索该数据,请在其他片段中使用以下代码

String strtext=getArguments().getString("message");

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM