从Android中的子活动中取回对象[重复]

Posted

技术标签:

【中文标题】从Android中的子活动中取回对象[重复]【英文标题】:Getting back object from child activiy in Android [duplicate] 【发布时间】:2015-09-14 18:56:06 【问题描述】:

我有一个 ma​​in_activity,它通过 Intent 启动一个子 Activity

我知道我们在onActivityResult 中调用的方法getStringExtra(string)getBooleanExtra(string) 等;但他们都是return原始数据... 如何从子活动的用户定义类中获取对象?

谢谢,这是我的第一个问题! :) 有点太晚了...

【问题讨论】:

【参考方案1】:

您正在寻找Parcelable

一个更简单但非最佳的解决方案是Serializable

片段:

 public class MyParcelable implements Parcelable 
     private int mData;

     public int describeContents() 
         return 0;
     

     public void writeToParcel(Parcel out, int flags) 
         out.writeInt(mData);
     

     public static final Parcelable.Creator<MyParcelable> CREATOR
             = new Parcelable.Creator<MyParcelable>() 
         public MyParcelable createFromParcel(Parcel in) 
             return new MyParcelable(in);
         

         public MyParcelable[] newArray(int size) 
             return new MyParcelable[size];
         
     ;

     private MyParcelable(Parcel in) 
         mData = in.readInt();
     
 

用法:

// Sender class
MyParcelable mp = new MyParcelable();
intent.putExtra("KEY_PARCEL", mp);

// Receiver class
Bundle data = getIntent().getExtras();
MyParcelable student = (Myparcelable)data.getParcelable("KEY_PARCEL");

Here's 一个工作示例。

编辑:这是使用片段的方法。

// Receiver class
Bundle data = getIntent().getExtras();

public class MyFragment extends Fragment 

    public static MyFragment newInstance(int index, Bundle data) 
        MyFragment f = new MyFragment();
        data.putInt("index", index);
        f.setArguments(data);
        return f;
    



// In the fragment
Bundle data = getArguments();

【讨论】:

只是为了让像我这样的菜鸟清楚,如果在片段中使用它应该是 getActivity().getIntent().getExtras() ! @Ashl7 可行,但不是一个好的设计实践。我更新了我的答案。【参考方案2】:

您可以创建Parcelable 自定义对象。

喜欢这个

public class Student implements Parcelable

像这样添加到意图

intent.putExtra("student", obj);

然后得到那个对象像

Bundle data = getIntent().getExtras();
Student student = (Student) data.getParcelable("student");

【讨论】:

【参考方案3】:

有这个网站可以从您的自定义类中生成 Parselabel 类....swweeeeeet! http://www.parcelabler.com/

【讨论】:

以上是关于从Android中的子活动中取回对象[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Android中的意图数据传递[重复]

使用android中的可序列化将对象从第二个活动传递回主要活动

Android:使用 putExtra 从片段访问容器活动对象?

Android错误尝试在空对象引用上调用虚拟方法[重复]

所有活动中的Android导航抽屉[重复]

Android:将对象从集合小部件传递到活动