如何将对象从片段传递到片段?

时间:2014-11-08 20:04:39

标签: android android-fragments

我想将实时对象fragment传递到fragment

传递数据

我没有办法做到这一点。

我认为唯一的方法是通过意图,但我不确定。

我读到了 Singleton模式,接口和Bundle,Global varible

如果可以使用分享/传递对象从一个fragment到下一个fragment,我希望看到示例。非常感谢。

3 个答案:

答案 0 :(得分:6)

通过实现模型bean ParcelableSerializable接口,可以在活动或片段之间传递真实对象。

Parcelable Parcel与Bundle类似,但更复杂,可以支持更复杂的类序列化。应用程序可以实现Parcelable接口来定义可以传递的特定于应用程序的类,尤其是在使用服务时。

您可以在本文here中了解如何实现Parcelable界面。

public class Foo implements Parcelable {
   ...
}

Serializable :可序列化的接口是java标准序列化。您可以阅读更多相关信息here

public class Foo implements Serializable {

    private static final long serialVersionUID = 0L;
   ...
}

假设您有一个类Foo正确实现Parcelable,将其放入Activity中的Intent:

Intent intent = new Intent(getBaseContext(), NextActivity.class);
Foo foo = new Foo();
intent.putExtra("foo", foo);
startActivity(intent);

从另一项活动中获取意图:

Foo foo = (Foo) getIntent().getExtras().getParcelable("foo");

** 编辑 **

正如最初的问题要求碎片一样,这就是它的工作原理:

 Fragment fragment = new Fragment();
 Foo foo = new Foo();

 Bundle bundle = new Bundle();
 bundle.putParcelable("Foo", foo);
 fragment.setArguments(bundle); 

从另一个片段中的bundle获取它:

Foo foo = (Foo) bundle.getParcelable("Foo");

希望这有帮助!

答案 1 :(得分:1)

  • 将对象从一个片段传递到另一个片段可以通过以下简单步骤实现:
  • 首先,您必须将模型类设为Parcelable:

    class Car implements Parcelable

  • 然后实现Parcelable类的覆盖函数:e-g

    @Override
    public int describeContents() {
        return 0;
    }
    
    @Override
    public void writeToParcel(Parcel parcel, int i) {
    
    }
    
  • 来自First Fragment:

    //设置要传递的数据

    MyFragment fragment = new MyFragment(); //Your Fragment
    Car car = new Car(); // Your Object 
    Bundle bundle = new Bundle();
    bundle.putParcelable("carInfo", car)  // Key, value
    fragment.setArguments(bundle); 
    

    //将数据传递给其他片段

    getFragmentManager()
           .beginTransaction()
           .replace(R.id.container, fragment)
           .commit();`
    
  • On Second Fragment

    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
    
       Bundle bundle = this.getArguments();
       if (bundle != null) {
           Car receivedCar = bundle.getParcelable("carInfo"); // Key
       } 
    }
    

    希望它会有所帮助:)

答案 2 :(得分:0)

还有另一种方法可以通过创建一个简单的setter函数来传递对象。 从您当前的片段制作目标片段的对象。你的目标片段应该有一个像

这样的setter函数
public void setObjectFunction(Object obj){this.mObj = obj}

YourFragment yourFragment = new YourFragment();
Object  passingObj = new Object();
yourFragment.setObjectFunction(passingObj);

然后

getFragmentManager()
   .beginTransaction()
   .replace(R.id.container, yourFragment)
   .commit();`