2013-06-19 10 views
6

Sto cercando di memorizzare il valore di un ArrayList in onSavedInstanceState() e ottenere i valori in una lista di array nel metodo onCreate ma solleva un eeror come in grado di mettere in pausa l'attivitàCome memorizzare valori in onSaveInstanceState() e retrive?

qui è il mio codice

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

e in il mio onCreate()

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

risposta

4

cant arraylist cascata parcable questo link aiuto per parcle arraylist Android ArrayList<MyObject> pass as parcelable questo codice può aiutare

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

lo proverò e lo saprò! –

5

per salvare il valore a SAVE esempio stato

@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); 
} 

di restituire valore

@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

Ho bisogno di riferire i valori di un arrayList nel mio metodo onCreate()! –

+0

java.lang.RuntimeException: impossibile interrompere l'attività questo è l'errore che sto ottenendo! –

+0

prova ad usare savedInstanceState.putParcelableArrayList ("bookThumb", bookData); savedInstanceState.putParcelableArrayList ("bookBitmaps", bitmaps); savedInstanceState.putParcelableArrayList ("featureBook", bookIds); – abhi

5

Bundle possibile memorizzare Serializable oggetti troppo.

Assicurati che il tuo class ProfileDetails implements Serializable.

Dopo che si sarà in grado di salvare/ripristinare l'ArrayList in bundle con:

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

Inoltre si dovrebbe garantire che class ProfileDetails contiene solo campi di tipi primitivi o Serializable (stringhe, array implementa già questa interfaccia).

Problemi correlati