【问题标题】:Repopulating list from Parcelable ArrayList从 Parcelable ArrayList 重新填充列表
【发布时间】:2011-07-18 18:53:20
【问题描述】:

我有一个使用 ArrayAdapter 的 ListView。 ArrayAdapter 中的项目是我创建的自定义对象。

我已经从 Parcelable 扩展了这个自定义对象。当用户旋转屏幕并保存 instanceState 时,它​​将 ArrayList 写入 outState。当重新创建 ListActivity 时,instanceState 被读回 ArrayList。在 onResume() 中,我将 ArrayList 分配给 ArrayAdapter 的 items 变量,然后使用 ArrayAdapter 在 ListView 上调用 setAdapter。

很遗憾,ListView 中没有显示任何内容。

我已经调试过了,在调用 setAdapter 之前,一切似乎都运行良好。 ArrayList是从instanceState中读回的,所有的数据都在里面,保存完好。

有什么想法吗?

更新:

我已经解决了这个问题。我会尝试在这里写一个解释,直到stackoverflow让我创建一个答案。

在 onCreate() 中,我实例化了我的 ArrayList 的一个新实例。然后,我将该 ArrayList 提供给我的 ArrayAdapter 的一个新实例,并使用该 ArrayAdapter 在 ListView 上调用 setAdapter。在 onCreate() 之后,调用 onRestoreInstanceState()。在 onRestoreInstanceState() 中,我基本上将我的 ArrayList 设置为一个新的 ArrayList(从 InstanceState 读取的那个)。即使我随后将 ArrayAdapter 的 item 变量指向这个新的 ArrayList,ArrayAdapter 似乎仍然指向旧的空变量。因此,列表中没有任何内容。我已更改 onRestoreInstanceState 以将从 InstanceState 读取的 ArrayList 复制到 onCreate() 中已声明的 ArrayList。

【问题讨论】:

    标签: android listview android-arrayadapter parcelable


    【解决方案1】:

    在 onCreate() 中,我实例化了我的 ArrayList 的一个新实例。然后,我将该 ArrayList 提供给我的 ArrayAdapter 的一个新实例,并使用此 ArrayAdapter 在 ListView 上调用 setAdapter。在 onCreate() 之后,调用 onRestoreInstanceState()。在 onRestoreInstanceState() 中,我基本上将我的 ArrayList 设置为一个新的 ArrayList(从 InstanceState 读取的那个)。即使我随后将 ArrayAdapter 的 item 变量指向这个新的 ArrayList,ArrayAdapter 似乎仍然指向旧的空变量。因此,列表中没有任何内容。我已更改 onRestoreInstanceState 以将从 InstanceState 读取的 ArrayList 复制到 onCreate() 中已声明的 ArrayList。

    【讨论】:

    • 能否将实现 Parcelable 的代码提供给自定义的 ArrayDapater 类?我对如何使用 Parcelable 方法处理 ListView 的可回收性质感到困惑,即使用户没有滚动,也可以对所有列表项进行完整的 Parcelable。
    猜你喜欢
    • 2013-11-01
    • 1970-01-01
    • 2013-03-17
    • 1970-01-01
    • 1970-01-01
    • 2012-01-27
    • 1970-01-01
    • 1970-01-01
    • 2018-12-14
    相关资源
    最近更新 更多