2011-07-10 2 views
3

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

Реализация:

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()); 

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

ответ

1

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

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

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

  1. Первый осуществить parcelable для класса 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. Затем применим для класса C следующим образом:

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

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

+0

спасибо, что mandel.it должен работать. но я не знаю, как реализовать parcelable для объекта B. Что мы должны писать в writeToParcel (Parcel dest, int flags) и readFromParcel, когда мы реализуем parcelable для Object B. –

+0

Вам нужно будет добавить такой код: 'dest.writeString (.); 'в writeToParce (.) и так:' testString = in.readString(); 'в readFromParcel (.). Специфика будет зависеть от соответствующих классов. – Mandel

+0

Нет Манделя, он не будет работать для объекта.B представляет собой набор пользовательских объектов. writeString будет работать только для строки. –

0

Один из способов я видел это сделано, используя serializeable

например.

если у вас есть переменная: Дата созданияAt;

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

Чтобы прочитать значение обратно в год, используйте: createdAt = (Date) in.readSerializable();

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

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