Android вложенных объектов - PullRequest
3 голосов
/ 10 июля 2011

как мы можем вложить объект в намерение? .
Например Допустим, есть объект A, который содержит одну строковую переменную и один другой объект B. Теперь B содержит объект C. C содержит список строк. так как я могу отправить объект A в намерении.
любая помощь по этому вопросу будет оценена.
заранее спасибо.

Реализация:

public static class A 
{
    private B  ObjectB;
}

public static class B 
{
    private String type;
    private List<C> C;
}

public static class C 
{
    private List<D> D;
}

public static class D 
{
    private String id;
    private String name;
    private String address;
    private String email;
}

как написать parcelable для класса C. я использую

dest.writeParceable(ObjectC,flag)

Для чтения:

in.readParcelable(C.getClass().getClassLoader());

но не работает

Ответы [ 2 ]

1 голос
/ 10 июля 2011

Вы должны были бы реализовать parcelable для объекта B, а затем реализовать parcelable для объекта A. Я никогда не делал этого, но вышеприведенное должно работать.

Редактировать

См. Фрагменты кода ниже, которые иллюстрируют, как реализовать parcelable для класса C.

  1. Сначала реализуем пакет для класса D следующим образом:

    dest.writeString(id); 
    dest.writeString(name);  
    dest.writeString(address);  
    dest.writeString(email);
    
    id = in.readString();  
    name = in.readString();  
    address = in.readString();  
    email = in.readString();  
    
  2. Затем реализовать parcelable для класса C следующим образом:

    dest.writeList(D);
    
    in.readList(D,this.getClass().getClassLoader());
    

Это непроверенный код, поскольку я никогда не реализовывал вложенную разметку, но стоит попробовать. Надеюсь, это поможет.

0 голосов
/ 24 марта 2013

Один из способов сделать это - использовать сериализуемый

например.

если у вас есть переменная:

Date createdAt;

Тогда в writeToParcel(Parcel out, int flags) вы можете написать:

out.writeSerializable(createdAt); 

Чтобы прочитать значение назад, yoy будет использовать:

createdAt = (Date) in.readSerializable();

Это, как говорится, хотя Parcelable был специально создан, потому что сериализация Java считалась слишком медленной. Так что, хотя это работает, не рекомендуется использовать большие объемы данных.

...