我正在开发一个简单的应用程序,其中包含带片段的tabview。我被困在这个地方,我必须在tabselect上将数据传递给我新创建的片段。
我有一个自定义类对象列表列表:
List<List<NewsObjectClass>> myList;
这是我被困的地方:
public static class PlaceholderFragment extends ListFragment{
private static final String ARG_SECTION_NUMBER = "section_number";
public PlaceholderFragment(){
}
public static PlaceholderFragment newInstance(int sectionNumber, List<List<NewsObjectsClass>> data) {
PlaceholderFragment fragment = new PlaceholderFragment();
Bundle args = new Bundle();
args.putInt(ARG_SECTION_NUMBER, sectionNumber);
// Here i want to pass my List<List<NewsObjectClass>> to the bundle
fragment.setArguments(args);
return fragment;
}
...
所以我需要一种方法如何将myCustomObjects的lsits列表传递给片段,所以我可以将它用于lsitview适配器。
任何有关如何传递此类数据的消息都会很棒。 谢谢。
答案 0 :(得分:20)
args.putParcelableArrayList(DATA_KEY, new ArrayList<>(data));
答案 1 :(得分:8)
制作NewObjectClass
Parcelable
或Serializable
,然后有效地创建一个新课程,其中包含您的列表,Parcelable
或Serializable
。然后使用Bundle.putSerializable
(或putParcelable
)
或者,更简单的是,如果您可以使用NewObjectClass
代替通用Parcelable
putParcelableArrayList
ArrayList
然后使用List
或者,最简单的一点是,NewObjectClass
可序列化并使用putSerializable
传递ArrayList<NewObjectClass>
,因为ArrayList
是Serializable
在最后一种情况下,您可能只需要向您的班级发送implements
Serializable
广告。
或者,如果您的数据看起来很大,请考虑将它们保留在自定义Application
派生对象中。您扩展Application
,然后这个对象将一直存在您的应用程序。不要忘记在清单中注册。
class MyApplication extends Application {
public static Object myData;
}
或者您可以使用共享偏好
PreferenceManager.getDefaultSharedPreferences().edit().putInt("a", 1).commit();
PreferenceManager.getDefaultSharedPreferences().getInt("a");
答案 2 :(得分:2)
使用putSerializable
方法传递自定义列表。
args.putSerializable(KEY, ArrayList<Type>);
并使用getSerializable
ArrayList<Type> list = (ArrayList<Type>) getArguments().getSerializable(KEY);
答案 3 :(得分:0)
或者最简单的方法是,使NewObjectClass可序列化,并使用putSerializable传递ArrayList,因为ArrayList可序列化
不幸的是,这在我的情况下不起作用。我最终将数组列表转换为字符串(或JSON字符串)并通过
发送ONLY_FULL_GROUP_BY
然后,片段将字符串解析回数组列表。