我需要将对象传递给我的片段才能初始化它们。
目前我正在使用((MyActivity)getActivity()).getX()
执行此操作。 (直接访问活动)
但是,我想将所需的对象作为参数传递。
我绝对不想在包中添加parcelable对象,因为它们需要过多无用的样板代码。我的目标是降低复杂性,而不是增加复杂性。
而且我不想将可序列化的对象添加到bundle中,因为它们很慢并且会导致不必要的开销。
将对象传递给片段的最佳方法是什么? 有什么想法以更方便的方式解决问题吗?
答案 0 :(得分:0)
你可以采用Android方式:Parcelable。
您可以序列化。
你可以做得很差:静态
您可以执行保留的方式:使用setRetainInstance(true)创建片段并保存对象引用。
答案 1 :(得分:0)
我绝对不想在包中添加parcelable对象,因为它们需要过多无用的样板代码。我的目标是降低复杂性,而不是增加复杂性。
您在模型类中编写此代码,该类与活动和片段分开。实施Parcelable
没有复杂性。这是将对象传递给Fragment
的常用方法。
还有其他解决方案吗?好吧,只要您的片段附加到您的活动,您仍然可以执行此操作((MyActivity)getActivity()).getX()
。在这种情况下,它甚至比Parcelable
更快,因为根本没有序列化。
其他方法是将对象写入数据库,将其ID传递给Fragment
,然后使用查询来检索对象。
您也可以使用SharedPreferences
,但这种情况很少使用。为此,您需要将对象转换为String
。
答案 2 :(得分:0)
我知道您不希望将parcelable / serializable对象用于Bundle。我也很同意你,因为我很懒,我的手机应用程序变得越来越复杂。
这是你可以做的,它可靠地运作。
示例代码:
public class MyFragment extends Fragment {
...
public void setList(final ArrayList<String> arrayList) {
...
}
在活动中:
MyFragment fragment1 = MyFragment.newInstance(<parameters>);
fragment1.setList( arrayList );
答案 3 :(得分:0)
在片段上设置属性后,是否需要更改属性?如果没有,您可以使用setArguments(Bundle)。如果它是一个相当轻的对象,您甚至可以跳过实现Parcelable并单独设置每个属性。优点是在方向改变时保留了参数。缺点是您需要在附加片段之前调用此方法,因此在片段使用后它不是非常有用。
答案 4 :(得分:0)
现在回答我为时已晚,但是否有人在想。推荐的方法是使用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最大大小,则很有用。