如何将对象从片段传递给片段?
问题描述:
我想通过实时对象从fragment
到fragment
。如何将对象从片段传递给片段?
I 不要想要通过数据。
我没有找到办法做到这一点。
我认为唯一的方法是通过意图,但我不确定。
我读了约单身模式,接口和捆绑,全球变数。
我想看看例如,如果它可能使用份额/通对象从一个fragment
到SECEND fragment
。非常感谢。
答
通过实现模型bean Parcelable
或Serializable
接口可以实现在活动或片段之间传递实物。
Parcelable:一个包类似于一个包,但更复杂,可以支持更复杂的类的序列化。应用程序可以实现Parcelable
接口来定义可以传递的特定于应用程序的类,特别是在使用服务时。
您可以看到如何在本文中实现Parcelable接口here。
public class Foo implements Parcelable {
...
}
Serializable:可序列化接口是Java标准序列化。你可以阅读更多关于它here。
public class Foo implements Serializable {
private static final long serialVersionUID = 0L;
...
}
假设你有一个类Foo
正确实现Parcelable,把它变成意图在一个活动:
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");
希望这有助于!
答
- 通行证对象从一个片段到另一个片段可以通过这些简单的步骤来达到的:
-
首先,你必须让你的模型类作为Parcelable:
class Car implements Parcelable
-
然后实现Parcelable类的覆盖功能:例如
@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);
//将数据传递到其他片段
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();`
我并不需要提取/拆卸对象类型varible'整型,字符串,布尔etc..''@覆盖 public void writeToParcel(Parcel dest,int flags)dest.writeString(varible1); dest.writeInt(varible2); dest.writeString(varible3); dest.writeString(varible4); }'然后收集每个变量的所有值。我需要将对象作为一个单元对象与所有方法一起传递/传递/共享。 – biraj800 2014-11-10 17:26:45
Android Dalvik(DVM)在许多方面与JVM不同,您可以在[post](http://*.com/questions/11374477/android-javac-vs-dalvik)中看到。每个应用程序在DVM中都有自己的实例,这意味着多个活动应用程序需要多个DVM实例。由此可见,用不同进程共享静态内存不是好主意,也不能保证内存中对象状态的生存期。 DVM也有一个类似于Java实现JVM的自动垃圾回收器。 – Deminem 2014-11-11 08:36:45
为了解决这个问题,Java提供了编组/解组的序列化来保持对象状态。但是,android提供了自己的'Parcelable'接口,它比'Serializable'更有效率。我建议阅读关于编组/解编[这里](https://coderwall.com/p/vfbing/passing-objects-between-activities-in-android)。根据Android准则,在活动/片段之间传递对象只能通过Parcelable/Serializable来实现。所有其他方法都有其优点和缺点。 – Deminem 2014-11-11 08:40:10