在两个片段之间传递复杂对象的相同实例

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或转换成StringList 实现已经 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");

在这里,我们将列表转换为可序列化,并在检索数据时将其类型转换为列表。

如有疑问,请评论。