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

时间:2019-06-21 09:45:36

标签: android fragment bundle instance

我必须对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类中具有的实例不同。有某种方法可以获取相同的实例吗?

2 个答案:

答案 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或转换为StringList实现已经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")