2016-11-08 2 views
1

В официальном documentation мы видим использование ObservableParcelable с String, как это:ObservableParcelable <String> не работает

public final ObservableParcelable<String> name = new ObservableParcelable<String>(); 

Но поскольку String не реализует Parcelable нет никакой возможности это компилируется. Итак, как я могу сделать свой объект расширением BaseObservable и иметь наблюдаемые поля и быть одновременно единым?

+0

почему вы хотите для смешивания 'BaseObservable' и' ObservableField' (и его братьев и сестер)? – pskink

+0

У меня есть Object, который расширяет BaseObservable и имеет ObservableField как поля. Я хочу, чтобы этот объект был применимым, но наблюдаемые поля не являются исчерпывающими –

ответ

0

Вы можете сэкономить не только parcelable полей, например:

public class ViewModel extends BaseObservable implements Parcelable 
{ 
    private ObservableField<String> title = new ObservableField<>(); 
    private ObservableInt count = new ObservableInt(); 

    private ViewModel(Parcel parcel) 
    { 
     title.set(parcel.readString()); 
     count.set(parcel.readInt()); 
    } 

    @Override 
    public int describeContents() 
    { 
     return 0; 
    } 

    @Override 
    public void writeToParcel(Parcel parcel, int flags) 
    { 
     parcel.writeString(title.get()); 
     parcel.writeInt(count.get()); 
    } 

    public static final Creator<ViewModel> CREATOR = new Creator<ViewModel>() 
    { 
     @Override 
     public ViewModel createFromParcel(Parcel in) 
     { 
      return new ViewModel(in); 
     } 

     @Override 
     public ViewModel[] newArray(int size) 
     { 
      return new ViewModel[size]; 
     } 
    }; 
} 

Но если вы хотите работать с parcelable, что вы должны реализовать этот интерфейс для классов

public class ParcelableString implements Parcelable 
{ 
    private String value; 

    /*Getter, Setter and implementation of Parcelable*/ 
} 
Смежные вопросы