2013-06-19 3 views
6

Am пытается хранить ценности в ArrayList в onSavedInstanceState() и получить значение в списке массива в методе OnCreate но поднимает eeror, как не в состоянии сделать паузу Активности вКак хранить значения в onSaveInstanceState() и извлекать?

здесь мой код

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

и мой onCreate()

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

ответ

4

вы не можете каскад ArrayList в parcable этой ссылке вам помочь для Parcle ArrayList Android ArrayList<MyObject> pass as parcelable этот код может помочь вам

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

Я попробую и дам вам знать! –

5

, чтобы сохранить значение в экономии экземпляра состояния

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

для восстановления значения

@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

Мне нужно передать значения arrayList в мой метод onCreate()! –

+0

java.lang.RuntimeException: невозможно приостановить активность, это ошибка, которую я получаю! –

+0

попытаться использовать savedInstanceState.putParcelableArrayList ("bookThumb", bookData); savedInstanceState.putParcelableArrayList ("bookBitmaps", растровые изображения); savedInstanceState.putParcelableArrayList ("featureBook", bookIds); – abhi

5

Bundle может хранить Serializable объекты тоже.

Убедитесь, что ваш class ProfileDetails implements Serializable.

После того, что вы будете иметь возможность сохранения/восстановления ArrayList в Bundle с помощью:

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

Кроме того, вы должны гарантировать, что class ProfileDetails содержит только поля примитивных типов или Сериализуемый (Строки, массивы уже реализует этот интерфейс).