【问题标题】:How to store values in onSaveInstanceState() and retrive?如何在 onSaveInstanceState() 中存储值并检索?
【发布时间】:2013-06-19 05:23:41
【问题描述】:

我试图将数组列表的值存储在 onSavedInstanceState() 中并在 onCreate 方法中获取数组列表中的值,但它会引发类似无法暂停活动的错误

这是我的代码

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

【问题讨论】:

    标签: android android-arrayadapter


    【解决方案1】:

    Bundle 也可以存储Serializable 对象。

    确保比你的class ProfileDetails implements Serializable

    之后,您将能够使用以下方法在 Bundle 中保存/恢复 ArrayList:

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

    您还应该保证class ProfileDetails 只包含原始类型或可序列化的字段(字符串、数组已经实现了这个接口)。

    【讨论】:

      【解决方案2】:

      在保存实例状态中保存值

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

      【讨论】:

      • 我需要在我的 onCreate() 方法中引用一个 arrayList 值!
      • java.lang.RuntimeException: Unable to pause activity 这是正在发生的错误!
      • 尝试使用 savedInstanceState.putParcelableArrayList("bookThumb", bookData); savedInstanceState.putParcelableArrayList("bookBitmaps", bitmaps); savedInstanceState.putParcelableArrayList("featureBook", bookIds);
      • 我无法编组!当我喜欢你的建议时出错!
      【解决方案3】:

      你不能级联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];
                }
          }; }
      

      【讨论】:

      • 我会尝试并告诉你!
      猜你喜欢
      • 1970-01-01
      • 2015-03-15
      • 2016-05-19
      • 2013-10-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多