Iam使用带有三个 fragment 菜单的内置Navigation抽屉 Activity ,我想通过这些 fragment 进行通信,这意味着要将数据从一个传递到另一个。我发现有三种与 fragment 进行通信的方式。我也清楚地了解到该 fragment 永远不会直接通信。

  • 使用接口(interface)
  • 全局类(扩展应用程序类)
  • 最后使用包

  • 现在我的问题是与 fragment 进行通信的最佳方式,目前Iam使用的是second method,即我将所有这些对象放入Globalized objects which extends Application Class的方法(getter&setter类)。这是正确的方法吗?

    最佳答案

    您可以在Object类中实现Serializable,然后仅使用 bundle 将其传递。我假设您正在从first_fragment中启动second_fragment。

    在您的第一个 fragment 中:

    FragmentTransaction ft =  getActivity().getSupportFragmentManager().beginTransaction();
    ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
    Fragment2 fragment2 = new Fragment2();
    
    Bundle bundle = new Bundle();
    YourObj obj = SET_YOUR_OBJECT_HERE;
    bundle.putSerializable("your_obj", obj);
    fragment2.setArguments(bundle);
    ft.replace(android.R.id.content, fragment2);
    ft.addToBackStack(null);
    ft.commit();
    

    在 fragment 二中:
    Bundle bundle = getArguments();
    YourObj obj= (YourObj) bundle.getSerializable("your_obj");
    

    编辑

    要序列化对象,只需在Object类中实现Serializable。

    如果您的Object类是YourObj.class
    public class YourObj implements Serializable {
        int id;
        String name;
    
        // GETTERS AND SETTERS
    }
    

    10-07 19:40
    查看更多