7

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

关于如何传递此类数据的任何 syggestions 都会很棒。谢谢。

4

4 回答 4

21
args.putParcelableArrayList(DATA_KEY, new ArrayList<>(data));
于 2016-01-18T07:01:24.527 回答
10

制作您的NewObjectClass ParcelableorSerializable然后有效地创建一个新类,其中包含您的列表,也Parcelableor Serializable。然后使用Bundle.putSerializable(或putParcelable

或者,更简单,如果你可以使用而不是通用的,NewObjectClass Parcelable那么使用putParcelableArrayListArrayListList

或者,最简单的,使NewObjectClassSerializable 并使用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");
于 2014-05-03T07:01:42.433 回答
5

使用putSerializable方法来传递您的自定义列表。

args.putSerializable(KEY, ArrayList<Type>);

并使用getSerializable

ArrayList<Type> list = (ArrayList<Type>) getArguments().getSerializable(KEY);
于 2018-02-01T13:24:34.580 回答
0

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

不幸的是,这在我的情况下不起作用。我最终将我的数组列表转换为字符串(或 JSON 字符串)并发送

bundle.putString()

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

于 2020-02-15T02:04:39.233 回答