在两个片段之间传递复杂对象的相同实例
Pass same instance of complexe object between two fragment
我必须对 A 和 B 以及 class 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 class 中的实例不同。有没有办法获得相同的实例?
不需要GSON
或转换成String
。 List
实现已经 serializable
,您可以将它们放在 Bundle 中,然后将一个从一个 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")
您应该使用 "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");
在这里,我们将列表转换为可序列化,并在检索数据时将其类型转换为列表。
如有疑问,请评论。
我必须对 A 和 B 以及 class 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 class 中的实例不同。有没有办法获得相同的实例?
不需要GSON
或转换成String
。 List
实现已经 serializable
,您可以将它们放在 Bundle 中,然后将一个从一个 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")
您应该使用 "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");
在这里,我们将列表转换为可序列化,并在检索数据时将其类型转换为列表。
如有疑问,请评论。