android - 从 Parcelable ArrayList 重新填充列表

标签 android listview android-arrayadapter parcelable

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

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

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

我已经进行了调试,在调用 setAdapter 之前一切似乎都运行良好。 ArrayList 从 instanceState 读回,所有数据都在那里并完美保存。

有什么想法吗?

更新:

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

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

最佳答案

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

关于android - 从 Parcelable ArrayList 重新填充列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6737842/

相关文章:

android - 将 UTC 日期转换为其他时区

java - 您必须使用@NonNull 注释主键吗?

java - Android - TextView 与 Listview 一起滚动/在 Listview 之前滚动

android - Spinner Android 的资源 NotFoundException

android - 仅使用一行 listview 中的 imageview 来启动一个新的 intent

Android findFragmentByTag 返回错误的 fragment

android - ListView 中的复选框自动检查最后位置的问题

listview - Obseravable Collection 在更改时不更新 ListView UI(Xamarin Forms 的 Prism)

java - 将自定义列表适配器与 AutoCompleteTextView 一起使用,并仍然保持自动完成的功能相同

android - 动态添加的 View 未出现