使用Bundle传递自定义数据列表

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)


Ale*_*tin 9

让你的NewObjectClass ParcelableSerializable,然后创建一个新的类,有效的,包括您的清单,也Parcelable还是Serializable.然后使用Bundle.putSerializable(或putParcelable)

或者,更简单,NewObjectClass Parcelable然后使用,putParcelableArrayList如果你可以做ArrayList而不是泛型List

或者,最简单的,使NewObjectClassSerializable和使用putSerializable传递ArrayList<NewObjectClass>因为ArrayListSerializable

在最后一种情况下,您可能只需要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)

  • @xenuit使用Parcelable而不是Serializable,有关更多信息,请参阅[this](http://blog.3pillarglobal.com/parcelable-vs-java-serialization-android-app-development) (3认同)

Kon*_*pko 5

使用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)