在片段之间传递对象

Nar*_*ran 2 android android-fragments

我使用带有三个片段菜单的内置导航抽屉活动,我希望通过这些片段进行通信意味着想要将数据从一个传递到另一个.我发现有三种可能的方式来与片段进行通信.我也清楚地知道片段永远不会直接沟通.

  • 使用界面
  • 全局类(扩展Application类)
  • 最后使用捆绑包

现在我的问题是哪个是与片段进行通信的最佳方式,目前Iam使用的second method是我把(getter和setter类)所有这些对象都用于Globalized objects which extends Application Class.这是正确的方法吗?

Rac*_*hit 10

您可以在Object类中实现Serializable,然后只使用bundle传递它.我假设您从first_fragment启动second_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();
Run Code Online (Sandbox Code Playgroud)

在片段二中:

Bundle bundle = getArguments();
YourObj obj= (YourObj) bundle.getSerializable("your_obj");
Run Code Online (Sandbox Code Playgroud)

编辑

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

如果您的Object类是YourObj.class

public class YourObj implements Serializable {
    int id;
    String name;

    // GETTERS AND SETTERS
}
Run Code Online (Sandbox Code Playgroud)


小智 5

通过使模型类Serializable或Parcelable可以在fragment和Activities之间传递对象.

Parcelable是一个Android类,可以支持更复杂的类序列化.在这里查看Parceble类的实现:http://shri.blog.kraya.co.uk/2010/04/26/android-parcel-data-to-pass-between-activities-using-parcelable-classes/

Serializable是一个Java类,适用于小对象.有关Serializable的信息,请访问:https: //developer.android.com/reference/java/io/Serializable.html

假设您的模型类是NewObject,然后在您的片段类中使用以下:

Fragment fragment = new Fragment();
NewObject newObject = new NewObject();

Bundle bundle = new Bundle();
bundle.putParcelable("Object", newObject);
fragment.setArguments(bundle); 
Run Code Online (Sandbox Code Playgroud)

要从onCreate函数中的另一个片段中使用bundle来获取它:

NewObject newObject = (NewObject) bundle.getParcelable("Object");
Run Code Online (Sandbox Code Playgroud)


use*_*187 5

数据持有者类:

    public class DataHolder implements Serializable{

        private String name,id;

        public DataHolder(String id, String name) {
            this.id = id;
            this.name = name;

        }

        public String getId() {
            return id;
        }

        public void setId(String id) {
            this.id = id;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }
    }
Run Code Online (Sandbox Code Playgroud)

片段A:

    DataHolder dataholder=new DataHolder("1","TestName");
    Bundle bundle=new Bundle();
    bundle.putSerializable("obj",dataholder);

    Fragment fragment=new FragmentB();
    fragment.setArguments(bundle);
    fragmentManager = getActivity(). getSupportFragmentManager();
    fragmentTransaction = fragmentManager .beginTransaction();
    fragmentTransaction.add(R.id.container, fragment);
    fragmentTransaction.commit();
Run Code Online (Sandbox Code Playgroud)

片段B:

   DataHolder dataholder = (DataHolder)getArguments().getSerializable(obj);  
Run Code Online (Sandbox Code Playgroud)