我想将实时对象从fragment
传递到fragment
。
我不想传递数据。
我没有办法做到这一点。
我认为唯一的方法是通过意图,但我不确定。
我读到了 Singleton模式,接口和Bundle,Global varible 。
如果可以使用分享/传递对象从一个fragment
到下一个fragment
,我希望看到示例。非常感谢。
答案 0 :(得分:6)
通过实现模型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);
从另一个片段中的bundle获取它:
Foo foo = (Foo) bundle.getParcelable("Foo");
希望这有帮助!
答案 1 :(得分:1)
首先,您必须将模型类设为Parcelable:
class Car implements Parcelable
然后实现Parcelable类的覆盖函数:e-g
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel parcel, int i) {
}
来自First Fragment:
//设置要传递的数据
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);
//将数据传递给其他片段
getFragmentManager()
.beginTransaction()
.replace(R.id.container, fragment)
.commit();`
On Second Fragment
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Bundle bundle = this.getArguments();
if (bundle != null) {
Car receivedCar = bundle.getParcelable("carInfo"); // Key
}
}
希望它会有所帮助:)
答案 2 :(得分:0)
还有另一种方法可以通过创建一个简单的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();`