Использование Parcelable в библиотечном классе

Я хочу отправить объект между действиями. Читая об этом, я пришел к выводу, что использование Parcelable — лучший способ, поскольку он оказывает наименьшее влияние на производительность. Причина, по которой я хочу это сделать, заключается в том, что мне нужно загружать данные из сети для создания объекта, поэтому я не хочу продолжать загрузку данных.

Однако, чтобы использовать Parcel, класс должен реализовать Parcelable. Поскольку я пытаюсь отправить объект, определенный в библиотеке, я не могу отредактировать класс, чтобы включить это.

Что было бы лучшим способом решить мое затруднительное положение?

Я попытался расширить класс библиотеки и реализовать Parcelable, но потерпел неудачу с ClassCastException. Я также видел упоминание о том, что я должен создать класс Parcelable, который обертывает класс моей библиотеки, и отправлять его таким образом?

Спасибо!


person Luke    schedule 07.03.2011    source источник
comment
В любом случае в какой-то момент вам нужно будет расширить класс библиотеки и реализовать сериализуемость.   -  person startoftext    schedule 16.07.2013


Ответы (2)


Как насчет использования библиотеки parceler? Вы можете указать своим Application классы библиотеки пакетов:

@ParcelClass(LibraryParcel.class)
public class AndroidApplication extends Application{
    //...
}

Если это работает, вы можете использовать следующий код для переноса/распаковки:

Parcelable wrapped = Parcels.wrap(new Example("Andy", 42));
Example example = Parcels.unwrap(wrapped);
example.getName(); // Andy
example.getAge(); // 42
person serv-inc    schedule 06.06.2018

Вы пытались использовать Bundle?

Например, если у вас есть раздельный класс User

Bundle bundle = new Bundle();
List<User> users = new ArrayList<User>();
String userName = user.setUserName("some name");
boolean isOnline = user.setOnline(true);
users.add(user);
bundle.putParcelableArrayList("USER", users);

И вы можете получить это как:

public ArrayList<User> getParcelableArrayList(Bundle bundle){
   List<User> userList = new ArrayList<User>();
   userList = bundle.getParcelableArrayList("USER");
}
person Viacheslav Okolitiy    schedule 19.03.2013