【问题标题】:ListView is reloading every time the rotation changes or i change to night mode每次旋转更改或我更改为夜间模式时,ListView 都会重新加载
【发布时间】:2020-11-17 22:18:46
【问题描述】:

我正在尝试开发一个将 excel 文件 (.xlsx) 读取到 ListView 的应用程序,我注意到每次旋转更改或更改为夜间模式(或相反)时列表视图重置并再次开始加载文件,

我知道它与生命周期方法(onCreate、onDestroy...)有某种关系,并且有一个选项可以使用 sheredPrefences 保存值,但我无法保存 arrayAdapterarrayList 到 sheredPrefences 那么我应该怎么做才能解决这个问题?

(对不起我的英语......)

【问题讨论】:

  • 我建议使用 MVP 或 MVVM 之类的模式将 UI 与数据分离。它将解决您的问题,因为您可以重用列表,将其传递给在配置更改时 Activity 被销毁后重新创建的新适配器。顺便说一句,比起 ListView,更喜欢 RecyclerView。 ListView 是一种现在非常古老的显示列表的方式。请,请,请不要将大量数据存储到 SharedPreferences 中,它们不是为此而生的。尤其是当您从本地 Excel 文件中读取数据时已经存储了数据。

标签: android listview apache-poi


【解决方案1】:

您是否尝试过指定 configChanges?

<activity name= ".YourActivity" android:configChanges="orientation|screenSize"/>

这应该会在更改方向之前保存您当前的 UI 状态。

但是,无论如何,更改主题可能会重新创建您的活动。

This might be relvant to you

【讨论】:

  • 解决了旋转问题,谢谢!但是在将设备更改为暗模式(android Q,OneUi)时仍然没有解决问题
【解决方案2】:

当你旋转设备时,activity被销毁,当旋转完成时,一个新的activity实例被创建,所以如果你想拥有之前的状态,那么就需要使用onSaveInstanceState(Bundle savedInstanceState)来将数据保存在包中并从 onRestoreInstanceState(Bundle savedInstanceState) 中获取数据

【讨论】:

    猜你喜欢
    • 2020-06-18
    • 2019-05-16
    • 2021-12-20
    • 2015-09-01
    • 2021-01-14
    • 2019-05-04
    • 1970-01-01
    • 2014-03-05
    • 1970-01-01
    相关资源
    最近更新 更多