SORU
22 AĞUSTOS 2010, Pazar


Nasıl yönlendirme değişiklikleri devlet kaybetmeden özel görünümler önlemek için ekran boyunca

Başarılı ve ekran yönlendirme değişiklikleri arasında bazı kritik bileşenleri kaydetmek için Activity benim ana için onRetainNonConfigurationInstance() uygulanan ettik.

Ama, özel görüşlerimi yönü değiştiğinde yeniden sıfırdan ediliyor gibi görünüyor. Bu benim durumumda söz konusu özel görünümü X/Y bir arsa olduğu için müsait ve puan özel görünümü saklanır çizilen olsa da mantıklı.

Orada kurnaz bir şekilde uygulamak için benzer bir şey için onRetainNonConfigurationInstance() için özel bir görünüm ya da yapmam gereken sadece uygulamak yöntemleri özel görünüm vermek bana ulaşmak ve ayarlamak onun "devlet"?

CEVAP
22 AĞUSTOS 2010, Pazar


View#onSaveInstanceState View#onRestoreInstanceState uygulama ve View.BaseSavedState sınıfını genişleterek bunu.

public class CustomView extends View {

  private int stateToSave;

  ...

  @Override
  public Parcelable onSaveInstanceState() {
    //begin boilerplate code that allows parent classes to save state
    Parcelable superState = super.onSaveInstanceState();

    SavedState ss = new SavedState(superState);
    //end

    ss.stateToSave = this.stateToSave;

    return ss;
  }

  @Override
  public void onRestoreInstanceState(Parcelable state) {
    //begin boilerplate code so parent classes can restore state
    if(!(state instanceof SavedState)) {
      super.onRestoreInstanceState(state);
      return;
    }

    SavedState ss = (SavedState)state;
    super.onRestoreInstanceState(ss.getSuperState());
    //end

    this.stateToSave = ss.stateToSave;
  }

  static class SavedState extends BaseSavedState {
    int stateToSave;

    SavedState(Parcelable superState) {
      super(superState);
    }

    private SavedState(Parcel in) {
      super(in);
      this.stateToSave = in.readInt();
    }

    @Override
    public void writeToParcel(Parcel out, int flags) {
      super.writeToParcel(out, flags);
      out.writeInt(this.stateToSave);
    }

    //required field that makes Parcelables from a Parcel
    public static final Parcelable.Creator<SavedState> CREATOR =
        new Parcelable.Creator<SavedState>() {
          public SavedState createFromParcel(Parcel in) {
            return new SavedState(in);
          }
          public SavedState[] newArray(int size) {
            return new SavedState[size];
          }
    };
  }
}

İş Görünümü ve Manzarası SavedState sınıf arasında paylaştırılır. Okuma ve SavedState sınıf Parcel gelen yazılı her işi yapmak gerekir. Sonra Görünümü sınıfınızın durumu üyelerin ayıklanması ve çalışma gerekli sınıf için geçerli bir duruma geri almak için yaptığı çalışma.

Notlar: View#onSavedInstanceState View#onRestoreInstanceState View#getId değerini döndürür eğer sizin için otomatik olarak denir >= 0. Bu xml içinde bir ıd verin ne olur ya setId el ile arama. Aksi takdirde aramalısın View#onSaveInstanceState ve yazma Parcelable döndü parsel seni içeri Activity#onSaveInstanceState kurtarmak için devlet ve daha sonra okumak ve kabul etmek View#onRestoreInstanceState Activity#onRestoreInstanceState.

Bu başka basit bir örnek CompoundButton

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • bombjack2991

    bombjack2991

    29 HAZİRAN 2008
  • calicoJake

    calicoJake

    29 EKİM 2007
  • SaMmM123

    SaMmM123

    3 Mayıs 2006