![]() |
1
416
你可以通过实现
笔记:
|
![]() |
2
468
|
![]() |
3
18
结合速度和正确性
|
![]() |
4
10
这里的答案已经很好了,但不一定适用于自定义视图组。要使所有自定义视图保持其状态,必须重写
我得出的结果与Kobor42的答案非常相似,但错误仍然存在,因为我是通过编程方式将视图添加到自定义视图组中的,而不是指定唯一的id。 mato共享的链接可以工作,但这意味着没有一个视图管理自己的状态-整个状态保存在ViewGroup方法中。
问题是,当这些视图组中的多个被添加到一个布局中时,它们的元素在xml中的ID不再是唯一的(如果它是用xml定义的)。在运行时,可以调用静态方法
以下是我在ViewGroup中的代码(它是抽象的,mOriginalValue是一个类型变量):
|
![]() |
5
9
和科特林在一起很容易
|
![]() |
6
3
我的问题是onRestoreInstanceState用最后一个视图的状态还原了所有自定义视图。我通过在自定义视图中添加以下两种方法来解决此问题:
|
![]() |
7
1
为了补充其他答案—如果您有多个具有相同ID的自定义复合视图,并且它们都是使用配置更改时最后一个视图的状态进行还原的,那么您所需要做的就是通过重写两个方法来告诉视图只向其自身分派save/restore事件。
为了解释发生了什么以及为什么这样做, see this blog post . 基本上,复合视图的子视图ID由每个复合视图共享,状态恢复会变得混乱。通过只为复合视图本身分派状态,我们可以防止它们的子视图从其他复合视图获得混合消息。 |
![]() |
8
1
使用
请注意,您的
|
![]() |
9
1
this answer 在Android版本9和10上造成了一些崩溃。我认为这是一个很好的方法,但当我看到一些 Android code 我发现它少了一个构造器。答案很古老,所以当时可能没有必要。当我添加缺少的构造函数并从创建者调用它时,崩溃得到了修复。 下面是经过编辑的代码:
|
![]() |
10
0
根据@Fletcher Johns的回答,我得出:
|
![]() |
john4ster · 对父级不更改状态的响应回调 3 年前 |
![]() |
Dylan L. · 为什么更新的状态没有返回到我的组件? 3 年前 |
![]() |
kuk · 如何在React中回调后动态更改状态的对象值? 3 年前 |
![]() |
Tú Nguyá» n · 更新状态时,我的输入没有更新值 3 年前 |