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

Sid*_*yas 4 android android-fragments android-activity android-fragmentactivity

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

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

以下是我的情景:

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

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

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

任何帮助将不胜感激.

根据InnocentKiller的回答编辑:

在FragmentOne中,我实现了:

    FragmentTwo = new FragmentTwo();
    Bundle bundle = new Bundle();
    bundle.putString("Hello", "My name is Siddharth");
    fragment.setArguments(bundle);
Run Code Online (Sandbox Code Playgroud)

在FragmentTwo中,我实现了:

    Bundle bundle = this.getArguments();
    String myInt = bundle.getString("Hello","Test");
    mStartTripButton.setText(myInt);
Run Code Online (Sandbox Code Playgroud)

Pan*_*ora 16

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

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;
 }
}
Run Code Online (Sandbox Code Playgroud)

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

DataHolderClass.getInstance().setDistributor_id("your data");
Run Code Online (Sandbox Code Playgroud)

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

 String _data = DataHolderClass.getInstance().getDistributor_id();
Run Code Online (Sandbox Code Playgroud)


cYr*_*ten 8

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

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

在EventBus上添加您的对象:

EventBus.getDefault().postSticky(anyObject);
startActivity(new Intent(getActivity(), SomeActivity.class));
Run Code Online (Sandbox Code Playgroud)

SomeActivity中的任何地方:

AnyObject anyObject = EventBus.getDefault().getStickyEvent(AnyObject.class);
Run Code Online (Sandbox Code Playgroud)

此测试只是为了表明它适用于各种活动,您可以调用getStickyEvent以在代码中的任何位置获取任何对象.

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

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