【发布时间】:2014-11-08 20:04:39
【问题描述】:
我想将 实时对象 从 fragment 传递给 fragment。
我不想传递数据。
我没有找到办法。
我认为唯一的方法是有意但我不确定。
我阅读了单例模式、接口和捆绑包、全局变量。
我想看看是否可以使用 share/pass object 从一个fragment 到第二个fragment。非常感谢。
【问题讨论】:
我想将 实时对象 从 fragment 传递给 fragment。
我不想传递数据。
我没有找到办法。
我认为唯一的方法是有意但我不确定。
我阅读了单例模式、接口和捆绑包、全局变量。
我想看看是否可以使用 share/pass object 从一个fragment 到第二个fragment。非常感谢。
【问题讨论】:
通过实现模型bean Parcelable 或Serializable 接口可以实现在活动或片段之间传递真实对象。
Parcelable: Parcel 类似于 Bundle,但更复杂,可以支持更复杂的类序列化。应用程序可以实现Parcelable 接口来定义可以传递的特定于应用程序的类,尤其是在使用服务时。
你可以在这篇文章here看到如何实现Parcelable接口。
public class Foo implements Parcelable {
...
}
Serializable:可序列化接口是java标准序列化。你可以阅读更多关于它的信息here。
public class Foo implements Serializable {
private static final long serialVersionUID = 0L;
...
}
假设您有一个类Foo 正确实现了 Parcelable,以将其放入 Activity 中的 Intent 中:
Intent intent = new Intent(getBaseContext(), NextActivity.class);
Foo foo = new Foo();
intent.putExtra("foo", foo);
startActivity(intent);
从另一个活动的意图中获取它:
Foo foo = (Foo) getIntent().getExtras().getParcelable("foo");
** 编辑 **
正如最初的问题所要求的片段,那么它就是这样工作的:
Fragment fragment = new Fragment();
Foo foo = new Foo();
Bundle bundle = new Bundle();
bundle.putParcelable("Foo", foo);
fragment.setArguments(bundle);
从另一个片段中的捆绑包中获取它:
Foo foo = (Foo) bundle.getParcelable("Foo");
希望这会有所帮助!
【讨论】:
int,string,boolean etc..@Override public void writeToParcel(Parcel dest, int flags) { dest.writeString(varible1); dest.writeInt(varible2); dest.writeString(varible3); dest.writeString(varible4); }然后从每个变量中收集所有值。我需要将对象作为一个单元对象与所有方法一起传输/传递/共享。
Parcelable,比Serializable效率更高。我建议阅读有关编组/解组的内容here。根据Android指南,activity/fragment之间的对象传递只能通过Parcelable/Serializable来实现。所有其他方法各有利弊。
首先,您必须将模型类设为 Parcelable:
class Car implements Parcelable
然后实现Parcelable类的覆盖函数:e-g
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel parcel, int i) {
}
从第一个片段开始:
//设置要传递的数据
MyFragment fragment = new MyFragment(); //Your Fragment
Car car = new Car(); // Your Object
Bundle bundle = new Bundle();
bundle.putParcelable("carInfo", car) // Key, value
fragment.setArguments(bundle);
// 将数据传递给其他Fragment
getFragmentManager()
.beginTransaction()
.replace(R.id.container, fragment)
.commit();`
第二个片段
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Bundle bundle = this.getArguments();
if (bundle != null) {
Car receivedCar = bundle.getParcelable("carInfo"); // Key
}
}
希望它会有所帮助:)
【讨论】:
还有另一种方法可以通过简单的 setter 函数来传递对象。 从您当前的片段制作目标片段的对象。你的目标片段应该有一个像
这样的setter函数public void setObjectFunction(Object obj){this.mObj = obj}
YourFragment yourFragment = new YourFragment();
Object passingObj = new Object();
yourFragment.setObjectFunction(passingObj);
然后
getFragmentManager()
.beginTransaction()
.replace(R.id.container, yourFragment)
.commit();`
【讨论】: