我想在不使用活动和片段活动的情况下在两个片段之间传递数据。
我不想使用以下活动在片段之间传递数据:Communicating with Other Fragments
以下是我的情景:
我有一个Parent片段,里面有两个子片段。现在我需要在这两个片段之间传递数据。如何实现这个目标?
我调查了这个:Event Bus但没有为片段找到实例。
在片段之间传递数据还有其他选择吗?
任何帮助将不胜感激。
根据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);
答案 0 :(得分: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;
}
}
DataHolderClass.getInstance().setDistributor_id("your data");
String _data = DataHolderClass.getInstance().getDistributor_id();
答案 1 :(得分:8)
您可以使用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
在代码中的任何位置获取任何对象。
因此,您可以在Fragment A中发布一个对象,并使用片段B中的getStickyEvent来检索它。
如果您希望从一个地方移动到另一个地方有很多参数和/或复杂对象,这将非常方便。只需创建一个包含参数的getter / setter的“holder”对象,然后传递它。比分别传递它们并以某种方式序列化复杂对象要简单得多。
答案 2 :(得分:4)
我认为您正在尝试将数据从一个片段传递到另一个片段,因此请尝试使用下面的代码。
使用Bundle,所以在下面的代码中写下你要发送数据的第一个片段。
Fragment fragment = new Fragment();
Bundle bundle = new Bundle();
bundle.putString("message", "From Activity");
fragment.setArguments(bundle);
要检索该数据,请在其他片段中使用以下代码
String strtext=getArguments().getString("message");