2015-06-28 2 views
3

У меня есть main_activity, который начинает ребенка Activity через Intent.Возвращение объекта от дочерней активности в Android

Я знаю о методах getStringExtra(string), или getBooleanExtra(string) и т.п., что мы звоним в onActivityResult; Но все они return примитивные данные ... Как я могу получить объект из пользовательского класса из дочерней активности?

Спасибо, и это мой первый вопрос здесь! :) kinda слишком поздно ...

ответ

1

Вы можете создать Parcelable пользовательский объект.

как этот

public class Student implements Parcelable{ 

добавить намерению как этот

intent.putExtra("student", obj); 

Тогда получаем, что объект как

Bundle data = getIntent().getExtras(); 
Student student = (Student) data.getParcelable("student"); 
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 рабочий пример.

EDIT: Вот как это сделать с фрагментами.

// 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(); 
+0

Для того, чтобы прояснить для noobs, подобных мне, это должно быть getActivity(). GetIntent(). GetExtras(), если используется в фрагментах! –

+1

@ Ashl7, который будет работать, но не является хорошей практикой дизайна. Я обновил свой ответ. – prakharsingh95

0

Существует этот сайт, который делает классы Parselabel из пользовательского класса .... swweeeeeet!

Смежные вопросы