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

  • Atlantic Records

    Atlantic Rec

    15 Aralık 2006
  • David Tedeyev

    David Tedeye

    20 AĞUSTOS 2011
  • videoisunrelated

    videoisunrel

    5 Mart 2009