【问题标题】:Android - Restore dynamically added view state on orientation changeAndroid - 在方向更改时恢复动态添加的视图状态
【发布时间】:2020-09-29 05:35:41
【问题描述】:

我目前正在使用将动态添加到布局中的自定义视图。我了解如何保护和恢复视图状态。

根据文档,只有带有 id 的视图才会被系统持久化。因此建议的解决方案是使用View.getViewId() 为每个动态添加的视图设置一个ID。

问题是,在方向改变时,通过这个方法获得一个 id 的每个视图,将获得一个与方向改变发生之前不同的 id。这会阻止视图状态被恢复,因为 id 不匹配。

尝试此操作的最简单设置:以编程方式将 EditText 添加到活动中,给它一个带有 View.generateViewId() 的 ID,然后输入一些文本并旋转。

我错过了什么吗?有没有办法为动态添加的视图提供 id,以便它们在方向更改时恢复自己?

【问题讨论】:

    标签: android android-layout android-view android-configchanges


    【解决方案1】:

    当您通过generateViewId() 创建 ID 时,您还必须将生成的 ID 作为变量保留在 Activity/Fragment 中,通过 onSaveInstanceState() 手动保存 ID,然后稍后恢复该 ID通过查看 savedInstanceState 参数保存的 ID。

    通过这样做,您可以确保只生成一次 ID,从而确保您在每次后续游戏中使用相同的 ID,从而正确恢复您的状态。

    【讨论】:

    • 我是这么想的。但是我怎么会记住哪个 id 是为哪个视图生成的!?在我的情况下:我有一个代表一种清单类型的 json 文件,我通过解析该 json 来动态构建我的视图。所以最后我有一个自定义视图(清单视图),其中包含 1..* 自定义视图(复选框、编辑文本等)。我如何记住哪个视图有哪个 id?
    • 是的,您需要分别跟踪每个 ID。 onSaveInstanceState() 支持数组以及复杂的 Parcelable 实现,因此您可以根据需要跟踪 ID 来构建复杂的结构。
    猜你喜欢
    • 1970-01-01
    • 2015-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-12
    • 1970-01-01
    相关资源
    最近更新 更多