【问题标题】:Saving state of ArrayList of custom objects保存自定义对象的 ArrayList 状态
【发布时间】:2010-08-12 16:38:38
【问题描述】:

我的 Activity 中有一个成员变量,它是一个 ArrayList。填充此 ArrayList 的对象是我定义的称为 RatingItem 的对象。 RatingItem 有几个成员变量,例如 rating、comment、id 等。

我想将此 ArrayList 保存在 onSaveInstanceState 中,以便可以从 onRestoreInstanceState 重新填充它。做这个的最好方式是什么?我从未保存过如此复杂的对象的状态。

感谢您的帮助

【问题讨论】:

    标签: android


    【解决方案1】:

    您可能应该让您的对象实现Parcelable。基本上,您必须添加从Parcel 写入和读取对象成员的方法,然后添加具有几个静态工厂方法的自定义CREATOR 内部类。在第一个链接页面上有一个演示,但并不难。

    然后您可以使用Bundle.putParcelableArrayList() 一次性保存整个列表。 (当您使用Bundle.getParcelableArrayList() 将其取出时,您必须强制转换列表,但它会正常工作。)

    【讨论】:

      【解决方案2】:

      一种选择是在 onSaveInstanceState 中迭代您的 ArrayList 并执行类似的操作

      RatingItem ri = list.get(i);
      ri.saveState(bundle);
      

      然后,自定义的 saveState 调用可以将其单独的状态保存到包中,如下所示:

      static final String RATING_KEY = "RATING_KEY";
      int myId;
      int myRating;
      
      void saveState(bundle)
      {
          bundle.putInt(RATING_KEY + "_" + myId, myRating);
      }
      

      myId 成员字段应在 RatingItem 的构造函数中设置,用于确保在恢复时可以将项目中的所有成员字段链接回特定项目(通过将上述相反并使用 bundle.getInt()带有适当的键+ID)。

      【讨论】:

        猜你喜欢
        • 2016-01-05
        • 2013-03-02
        • 1970-01-01
        • 2013-12-25
        • 2011-03-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-09-16
        相关资源
        最近更新 更多