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

时间:2014-05-03 06:58:25

标签: android list android-fragments bundle custom-object

我正在开发一个简单的应用程序,其中包含带片段的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适配器。

任何有关如何传递此类数据的消息都会很棒。 谢谢。

4 个答案:

答案 0 :(得分:20)

args.putParcelableArrayList(DATA_KEY, new ArrayList<>(data));

答案 1 :(得分:8)

制作NewObjectClass ParcelableSerializable,然后有效地创建一个新课程,其中包含您的列表,ParcelableSerializable。然后使用Bundle.putSerializable(或putParcelable

或者,更简单的是,如果您可以使用NewObjectClass代替通用Parcelable

,请putParcelableArrayList ArrayList然后使用List

或者,最简单的一点是,NewObjectClass可序列化并使用putSerializable传递ArrayList<NewObjectClass>,因为ArrayListSerializable

在最后一种情况下,您可能只需要向您的班级发送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

然后,片段将字符串解析回数组列表。