gpt4 book ai didi

android - 如何避免 android 子组件中的重复 id?

转载 作者:太空狗 更新时间:2023-10-29 13:42:17 26 4
gpt4 key购买 nike

我刚刚涉足 Android 开发的有趣世界,但我正在处理的测试应用程序遇到了一个非常古怪的问题。

该应用使用 TableLayout,其中每个 TableRow 包含一个 EditText 和一些 Button。

可以在运行时添加和删除 TableRows。一切似乎都正常,直到我不小心倾斜了我的设备。显示器响应并重新排列布局,但突然之间每一行的所有值都相同。

经过一番摸不着头脑后,我明白了是怎么回事。由于方向改变,Android 正在重新启动 Activity 。发生这种情况时,Android 会尝试保存并恢复您的实例状态,但它是通过存储与组件 ID 相关的数据来实现的。

在我的例子中,因为行都是从相同的布局创建的,所以每一行中的 EditText 都有相同的 id。据我所知,结果是当信息被保存时,每一行都会被覆盖,所以最后一行胜出。

恢复时只有一个值与该 ID 关联,因此它会应用于每一行!

在我的例子中,我能够解决它,因为我并不真的需要保留这些值。在我的 onSaveInstanceState 中,我不调用 super.onSaveInstanceState,在 onRestoreInstanceState 中也是如此。

这终于让我想到了我的问题!

如果我确实希望保存和恢复这些单独的行值怎么办?是否有一种公认的方法可以在重用组件(在我的例子中是 TableRow)上生成唯一 ID?

最佳答案

如果我是你,我不会在 EditText View 上使用 your_view.setId(your_new_id),因为这会使你的应用不太稳定:如果出现另一个 View 怎么办拥有与 your_new_id 完全相同的 ID?

我会使用 your_view.setTag(some_unique_tag) 然后使用 findViewWithTag(some_unique_tag) 再次查找 EditText View 。

findViewWithTag(some_unique_tag) 可以是任何 Object - 我个人更喜欢 String 因为这样很容易制作一些描述性和独特的标签。

请记住,只有您在其上使用 .setTagView 具有标签。

关于android - 如何避免 android 子组件中的重复 id?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4273708/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com