我需要将对象传递给我的片段以初始化它们。目前我正在使用((MyActivity)getActivity()).getX()
. (直接访问活动)
但是,我想将所需的对象作为参数传递。
我绝对不想将可打包对象添加到捆绑包中,因为它们需要大量无用的样板代码。我的目标是降低复杂性,而不是增加复杂性。
而且我不想将可序列化对象添加到包中,因为它们很慢并且会导致不必要的开销。
将对象传递给片段的最佳方法是什么?有什么想法可以更方便地解决问题吗?
我需要将对象传递给我的片段以初始化它们。目前我正在使用((MyActivity)getActivity()).getX()
. (直接访问活动)
但是,我想将所需的对象作为参数传递。
我绝对不想将可打包对象添加到捆绑包中,因为它们需要大量无用的样板代码。我的目标是降低复杂性,而不是增加复杂性。
而且我不想将可序列化对象添加到包中,因为它们很慢并且会导致不必要的开销。
将对象传递给片段的最佳方法是什么?有什么想法可以更方便地解决问题吗?
我绝对不想将可打包对象添加到捆绑包中,因为它们需要大量无用的样板代码。我的目标是降低复杂性,而不是增加复杂性。
您在与活动和片段分开的模型类中编写此代码。实施没有复杂性Parcelable
。这是将对象传递给Fragment
.
还有其他解决方案吗?好吧,((MyActivity)getActivity()).getX()
只要您的片段附加到您的活动,您仍然可以执行此操作。在这种情况下,它甚至比Parcelable
根本没有序列化更快。
其他方法是将对象写入数据库,将它们的 id 传递给 a Fragment
,然后使用查询来检索对象。
您也可以使用SharedPreferences
,但很少使用。为此,您需要将对象转换为String
.
我了解您不想将可打包/可序列化对象用于 Bundle。我也同意你的观点,因为我很懒,而且我的手机应用程序越来越复杂。
这是你可以做的,它工作可靠。
示例代码:
public class MyFragment extends Fragment {
...
public void setList(final ArrayList<String> arrayList) {
...
}
在活动中:
MyFragment fragment1 = MyFragment.newInstance(<parameters>);
fragment1.setList( arrayList );
你可以做Android的方式:Parcelable。
然后就可以序列化了。
你可以做坏事:静态
您可以使用保留的方式:使用 setRetainInstance(true) 创建一个片段并保存您的对象引用。
一旦在片段上设置了属性,您是否需要更改它们?如果没有,您可以使用 setArguments(Bundle)。如果它是一个相当轻的对象,您甚至可以跳过实现 Parcelable 并单独设置每个属性。优点是参数在方向改变时被保留。缺点是您需要在附加片段之前调用此方法,因此一旦使用片段,它就不是很有用。
我的回答为时已晚,但如果其他人想知道的话。推荐的方法是使用 Parcelable 或 Serializable,但你总是可以这样做:
public class ObjectManager {
private static final String TAG = "ObjectManager";
private static ObjectManager instance;
private Object currentObject;
public static ObjectManager getInstance() {
if (instance == null)
instance = new ObjectManager();
return instance;
}
public Object getCurrentObject() {
return currentObject;
}
public void setCurrentObject(Object object) {
this.currentObject = object;
}
}
然后使用它:只要您的应用程序正在运行,您就可以在需要的地方使用它
//Use on the object you would like to save
ObjectManager.getInstance().setCurrentObject(object);
//Get the instance from pretty much everywhere
Object = ObjectManager.getInstance().getCurrentObject();
您可以始终使用它,但如果您传递大于 Bundle 最大大小的对象,它最有可能是有用的。