从Parcelable ArrayList重新填充列表

时间:2011-07-18 18:53:21

标签: android listview android-arrayadapter parcelable

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

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

不幸的是,ListView中没有任何内容。

我已经调试过,在调用setAdapter之前,一切似乎都运行得很好。从instanceState读回ArrayList,所有数据都存在并保存完好。

有什么想法吗?

更新

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

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

1 个答案:

答案 0 :(得分:0)

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