Передача объекта через Intent

By | 05.03.2014

Создавая новое Activity, в него можно передавать Intent. Сам по себе интент может содержать данные, которые передаются в него через intent.PutExtra(), а принимаются с использованием метода intent.getExtra(). Также через интент можно передать кастомный объект, что бывает очень полезно. Для этого Ваш объект должен использовать интерфейс Parcelable. Вот как выглядит код:

public class Item implements Parcelable

Использование этого интерфейся подразумевает включение в модель нескольких технических методов для сохранения и солучения объекта. Приведу их в коде:

@Override
public int describeContents() {
  return 0;
}
 
// метод для записи объекта в Parcel
@Override
public void writeToParcel(Parcel parcel, int flags) {
  // для сохранения данных используем Bundle, тут думаю понятно
  // Можно обойтись и без него, но так, как мне кажется удобнее
  Bundle bundle = new Bundle();
 
  bundle.putLong("id", id);
  bundle.putString("name", site);
 
  // сохраняем
  parcel.writeBundle(bundle);
}
 
// возвращаем объект
public static final Parcelable.Creator CREATOR = new Parcelable.Creator() {
  public Item createFromParcel(Parcel in) {
    return new Item(in);
  }
 
  public Item[] newArray(int size) {
    return new Item[size];
  }
};

В модели осталось добавитьконструктор, который будет заполнять объект данными из Parcel, его используем метод createFromParcel описанный выше

public Item(Parcel parcel) {
  Bundle bundle = parcel.readBundle();
 
  id = bundle.getLong("id");
  name = bundle.getString("name");
}

Передаётся объект стандартно:

Intent intent = new Intent(context, NewActivity.class);
intent.putExtra("item", item);
context.startActivity(intent);

Получить объект, переданный через интент в новой активности можно так:

Item item = getIntent().getParcelableExtra("item");

Америки я конечно не открыл, но думаю новичкам будет полезно.