使用片段

时间:2016-04-01 09:23:52

标签: android android-fragments android-activity

我有自定义列表类型(finalHolder.data)

的数据

之前我不得不将这些数据发送到Fragment构造函数,它正常工作

  Fragment fragment;
                fragment = new RouteMap(finalHolder.data);
                ((Activity)getContext()).getFragmentManager().beginTransaction().replace(R.id.content_frame,fragment).commit();

Fragment构造函数代码

public RouteMap() {
    // Required empty public constructor
}

public RouteMap(MyListEntity data) {
    this.data = data;
}

活动构造函数:

 public Map() {

}

public Map(MyListEntity data) {
    this.data = data;
}

但现在我希望这些相同的数据能够到达一个活动(Map2)

我尝试了putExtra但有意图但是它没有工作

简而言之,我想要" finalHolder.data"在调用它时发送给Activity构造函数。

如果不可能,请建议解决方案 感谢

4 个答案:

答案 0 :(得分:1)

不建议使用Activity构造函数。要将数据对象发送到活动,您可以使用Parcelable的Intent附加功能。为此你需要按照以下方式进行。

  1. 从Parcelable实现您的数据类

    Ex:MyListEntity实现了Parcelable

  2. 覆盖数据类中的以下方法(MyListEntity)writeToParcel(),readFromParcel()
  3. 3.在数据类(MyListEntity)中实现CREATOR类

    Parcelable示例的参考链接: passing object to activity

    1. 使用Intent发送数据对象,如下所述
    2. Intent i = new Intent(this,Activity(Map2).class);
      
      i.putExtra("mylistdata",finalHolder.data);
      
      startActivity(i);
      
      1. 最后在您的Activity(Map2)onCreate()方法中获取相同的数据,如下所述
      2. MyListEntity listEntry = getIntent().getParcelableExtra("mylistdata");
        

        现在您的对象已准备好进行第二项活动。  希望这对你有所帮助。

答案 1 :(得分:0)

要在意图中发送对象,对象的类必须是可序列化的,所以制作你的 MyListEntity实现serializable然后使用Intent的putExtra(String name, Serializable value),而在其他活动中使用intent getSerializableExtra (String name)但不要忘记转换返回的值

答案 2 :(得分:0)

一个选项可能是让您的自定义类实现Serializable接口,然后您可以使用Intent#putExtra()方法的putExtra(Serializable ..)变体在intent extra中传递对象实例。

您的数据应该实现Serializable即

MyListEntity implements Serializable

//使用此方法发送数据

intent.putExtra("MyClass", finalHolder.data);

//在第二个活动中检索对象

getIntent().getSerializableExtra("MyClass");

答案 3 :(得分:0)

关于你的片段:将数据通过c-tor传递给片段是不明智的! 使用参数机制:

Fragment f = new SomeFragment();
Bundle args = new Bundle();
args.putExtra("data", someData);
f.setArguments(args);

撤回他们:

getArguments().getParcelableExtra("data")

更多信息here

但是(回到你的问题),为此,你的数据必须实现Serialisable(Java方法),或者谷歌建议Parcelable(Android风格)

有关Parcelable here的更多信息。 实现Parcelable界面可能很无聊且容易出错,因此一些很酷的人创建了这个:http://www.parcelabler.com/