我必须对A和B以及MyClass类的对象列表进行分段。 我的目标是将列表中对象的实例从A传递到B。
此刻,我按照如下方式使用GSON库
class A extends Fragment{
private List<MyClass> list;
...
public void startB(){
Bundle params = new Bundle();
params.putString("myClassList", new Gson().toJson(this.list));
loader.loadFragment("B_CLASS_TAG", params);
}
}
class B extends Fragment{
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
Type listType = new TypeToken<List<MyClass>>(){}.getType();
recipients = new Gson().fromJson(params.getString("myClassList"), listType);
}
}
这样,我可以取回B片段中的对象列表,它们都具有相同的值,但它们与我在A类中具有的实例不同。有某种方法可以获取相同的实例吗?
答案 0 :(得分:1)
您应使用“ putSerializable”而不是“ putString”
从片段A发送数据
Bundle bundle = new Bundle();
bundle.putSerializable("list", (Serializable) list)
fragmentb.setArguments(bundle);
接收片段B中的数据
public List<Integer> listData = (List<Integer>) getArguments().getSerializable("list");
在这里,我们正在以可序列化的方式转换列表,同时检索将其类型转换为列表的数据。
如有疑问,请发表评论。
答案 1 :(得分:0)
不需要GSON
或转换为String
。 List
实现已经serializable
,您可以将它们放入捆绑包中,然后从一个Fragment
发送到另一个。
用于从Fragment
A发送数据
public void startB(){
Bundle params = new Bundle();
params.putSerializable("myClassList", (Serializable) this.list);
loader.loadFragment("B_CLASS_TAG", params);
}
在Fragment
B中,以接收数据
recipients = (List<MyClass>)getArguments().getSerializable("myClassList")