2013-06-19 27 views
6

Am cố gắng để lưu trữ giá trị của một ArrayList trong onSavedInstanceState() và nhận được các giá trị trong một danh sách mảng trong phương pháp onCreate nhưng nó đặt ra một eeror như không thể tạm dừng hoạt độngLàm thế nào để lưu trữ các giá trị trong onSaveInstanceState() và thử lại?

đây là mã của tôi

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

và trong tôi onCreate()

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

Trả lời

4

bạn không thể ArrayList thác để parcable liên kết này giúp bạn cho parcle ArrayList Android ArrayList<MyObject> pass as parcelable mã này có thể giúp bạn

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

Tôi sẽ thử và cho bạn biết! –

5

để lưu giá trị trong tiết kiệm dụ nhà nước

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

để khôi phục lại giá trị

@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

tôi cần tham khảo giá trị arrayList trong phương thức onCreate() của tôi! –

+0

java.lang.RuntimeException: Không thể tạm dừng hoạt động, đây là lỗi đang nhận được! –

+0

cố gắng sử dụng savedInstanceState.putParcelableArrayList ("bookThumb", bookData); savedInstanceState.putParcelableArrayList ("bookBitmaps", bitmap); savedInstanceState.putParcelableArrayList ("featureBook", bookIds); – abhi

5

Bundle có thể lưu trữ Serializable đối tượng quá.

Đảm bảo hơn class ProfileDetails implements Serializable của bạn.

Sau đó bạn sẽ có thể lưu/khôi phục ArrayList trong Bundle sử dụng:

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

Ngoài ra, bạn nên đảm bảo rằng class ProfileDetails chỉ chứa lĩnh vực loại nguyên thủy hoặc Serializable (Strings, Mảng đã thực hiện giao diện này).

Các vấn đề liên quan