2013-06-19 6 views
6

próbuję wartości sklep z ArrayList w onSavedInstanceState() i uzyskać wartości z listy tablicy w metodzie onCreate ale podnosi eeror jak w stanie wstrzymać AktywnośćJak przechowywać wartości w onSaveInstanceState() i retrive?

Oto mój kod

public void onSaveInstanceState(Bundle savedInstanceState) { 
    savedInstanceState.putParcelable("Old", (Parcelable) profileDetails); 
    super.onSaveInstanceState(savedInstanceState); 
} 

aw My onCreate()

if (savedInstanceState != null) { 
    profileDetails= (ArrayList<ProfileDetails>)savedInstanceState.getParcelable("Old"); 
} 
else { 
    profileDetails = GetSearchResults(); 
} 

Odpowiedz

4

cant kaskadowy ArrayList do parcable link do tej pomocy Ci za parcle ArrayList Android ArrayList<MyObject> pass as parcelable ten kod może pomóc

public class ParcleListTopic implements Parcelable{ 
    private List<ParcleTopic> list; 
    private ArrayList<HoldListTopic> listh=new ArrayList<HoldListTopic>(); 
    public ArrayList<HoldListTopic> GetListTopic() 
    { 
     for(int i=0;i<list.size();i++) 
     { 
      listh.add(list.get(i).GetHold()); 
     } 
     return listh; 
    } 
    public void writeToParcel(Parcel dest, int flags) { 
     dest.writeTypedList(list); 
    } 
    public ParcleListTopic(Parcel in) 
    { 
     in.readTypedList(list,ParcleTopic.CREATOR); 

    } 
    public ParcleListTopic(List<ParcleTopic> list) 
    { 
     this.list=list; 
    } 
    public static final Parcelable.Creator<ParcleListTopic> CREATOR = new Parcelable.Creator<ParcleListTopic>(){ 
      public ParcleListTopic createFromParcel(Parcel s) 
      { 
       return new ParcleListTopic(s); 
      } 
      public ParcleListTopic[] newArray(int size) 
      { 
       return new ParcleListTopic[size]; 
      } 
    }; 
    public int describeContents() { 
     // TODO Auto-generated method stub 
     return 0; 
    } 
} 


public class ParcleTopic implements Parcelable 
{ 
    HoldListTopic hold; 
    public ParcleTopic(HoldListTopic hold) 
    { 
     this.hold=hold; 
    } 
    public HoldListTopic GetHold() 
    { 
     return hold; 
    } 
    public int describeContents() 
    { 
     return 0; 
    } 
    public void writeToParcel(Parcel dest, int flags) 
    { 
     dest.writeString(hold.Title); 
     dest.writeString(hold.Date); 
     dest.writeInt(hold.NumberComment); 
     dest.writeInt(hold.ID); 
    } 
    public ParcleTopic(Parcel in) 
    { 
     hold.Title=in.readString(); 
     hold.Date=in.readString(); 
     hold.NumberComment=in.readInt(); 
     hold.ID=in.readInt(); 
    } 
    public static final Parcelable.Creator<ParcleTopic> CREATOR = new Parcelable.Creator<ParcleTopic>() 
    { 
      public ParcleTopic createFromParcel(Parcel s) 
      { 
       return new ParcleTopic(s); 
      } 
      public ParcleTopic[] newArray(int size) 
      { 
       return new ParcleTopic[size]; 
      } 
    }; } 
+0

Spróbuję i dam znać! –

5

aby zapisać wartość w stan oszczędzania instancji

@Override 
public void onSaveInstanceState(Bundle savedInstanceState) { 
    // Save UI state changes to the savedInstanceState. 
    // This bundle will be passed to onCreate if the process is 
    // killed and restarted. 
    savedInstanceState.putBoolean("MyBoolean", true); 
    savedInstanceState.putDouble("myDouble", 1.9); 
    savedInstanceState.putInt("MyInt", 1); 
    savedInstanceState.putString("MyString", "Welcome back to Android"); 
    // etc. 
    super.onSaveInstanceState(savedInstanceState); 
} 

przywrócić wartość

@Override 
    public void onRestoreInstanceState(Bundle savedInstanceState) { 
    super.onRestoreInstanceState(savedInstanceState); 
    // Restore UI state from the savedInstanceState. 
    // This bundle has also been passed to onCreate. 
    boolean myBoolean = savedInstanceState.getBoolean("MyBoolean"); 
    double myDouble = savedInstanceState.getDouble("myDouble"); 
    int myInt = savedInstanceState.getInt("MyInt"); 
    String myString = savedInstanceState.getString("MyString"); 
    } 
+0

Potrzebuję odesłać wartości arrayList w mojej metodzie onCreate()! –

+0

Wyjątek java.lang.RuntimeException: Nie można wstrzymać działania, jest to błąd, który dostaję! –

+0

spróbuj użyć savedInstanceState.putParcelableArrayList ("bookThumb", bookData); savedInstanceState.putParcelableArrayList ("bookBitmaps", bitmapy); savedInstanceState.putParcelableArrayList ("featureBook", bookIds); – abhi

5

Bundle można przechowywać Serializable obiektów zbyt.

Upewnij się, że Twój telefon nie jest class ProfileDetails implements Serializable.

Po tym będzie można zapisać/przywrócić ArrayList w Bundle za pomocą:

savedInstanseState.putSerializable("Old", profileDetails); 
... 
profileDetails = (ArrayList<ProfileDetails>)savedInstanceState.getSerializable("Old"); 

Ponadto należy zagwarantować, że class ProfileDetails zawiera tylko pola prymitywnych typów lub Serializable (smyczki, Tablice już implementuje ten interfejs).