xen*_*uit 6 android bundle list custom-object android-fragments
我正在开发一个简单的应用程序,其中包含带片段的tabview.我被困在这个地方,我必须在tabselect上将数据传递给我新创建的片段.
我有一个自定义类对象列表的列表:
List<List<NewsObjectClass>> myList;
Run Code Online (Sandbox Code Playgroud)
这是我被卡住的地方:
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;
}
...
Run Code Online (Sandbox Code Playgroud)
所以具体我需要一种方法如何将myCustomObjects的lsits列表传递给片段,所以我可以将它用于lsitview适配器.
关于如何传递这种类型数据的任何想法都会很棒.谢谢.
Ali*_*ani 20
args.putParcelableArrayList(DATA_KEY, new ArrayList<>(data));
Run Code Online (Sandbox Code Playgroud)
让你的NewObjectClass
Parcelable
或Serializable
,然后创建一个新的类,有效的,包括您的清单,也Parcelable
还是Serializable
.然后使用Bundle.putSerializable
(或putParcelable
)
或者,更简单,NewObjectClass
Parcelable
然后使用,putParcelableArrayList
如果你可以做ArrayList
而不是泛型List
或者,最简单的,使NewObjectClass
Serializable和使用putSerializable
传递ArrayList<NewObjectClass>
因为ArrayList
是Serializable
在最后一种情况下,您可能只需要implements
Serializable
为您的班级做广告.
或者,如果您的数据看起来很大,请考虑将它们保存在自定义Application
对象中.你扩展Application
,然后这个对象将存在你的应用程序存在.不要忘记在清单中注册它.
class MyApplication extends Application {
public static Object myData;
}
Run Code Online (Sandbox Code Playgroud)
或者您可以使用共享首选项
PreferenceManager.getDefaultSharedPreferences().edit().putInt("a", 1).commit();
PreferenceManager.getDefaultSharedPreferences().getInt("a");
Run Code Online (Sandbox Code Playgroud)
使用putSerializable
方法传递您的自定义列表。
args.putSerializable(KEY, ArrayList<Type>);
Run Code Online (Sandbox Code Playgroud)
并使用它获取它 getSerializable
ArrayList<Type> list = (ArrayList<Type>) getArguments().getSerializable(KEY);
Run Code Online (Sandbox Code Playgroud)