Android:具有具有完全相同 ID 的元素的不同布局 - 有效,但为什么呢?

标签 android resources

今晚我正在开发一个应用程序,我注意到我有两个具有不同布局(mylayout1.xml 和 mylayout2.xml)的类似 Activity ...但是在这些布局中我有一些相同的元素,一直到它们的 ID(每个布局文件中的“@+id/mybutton”)。

当我在一个 Activity 中设置 ContentView(R.layout.mylayout1),然后通过 findViewById(R.id.mybutton) 执行 setOnClickListener() 时,当我最终点击时,Android 如何“知道”我真正指的是哪个按钮是吗?

一切似乎都工作得很好,触发了适当的回调(而且据我所知,没有进入错误的 Activity - 尽管到目前为止在我的测试中一次只有一个在屏幕上(例如,对话框类型的 Activity )。我突然想到(因为我在不相关的工作中注意到这种重复),也许这只是偶然而不是设计。OTOH,如果 Android 对此很聪明,我不会担心只要因为此类元素的多个实例永远不会同时出现在屏幕上(例如 OK 按钮)。

最佳答案

当您调用 setContentView 时,将解析并创建来自 XML 的 View 层次结构。当您随后搜索具有特定 id 的 View 时,android 将查看该 View 层次结构并搜索具有该匹配 id 的 View 。因此,您永远不会得到在其他一些具有相同 ID 的 .xml 文件中定义的 View 元素,因为这些 View 元素不是 Activity View 层次结构的一部分。

关于Android:具有具有完全相同 ID 的元素的不同布局 - 有效,但为什么呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7820671/

相关文章:

java - viewpager2 降低水平滚动的灵敏度

android - 在 google play (Android Market) 上上传屏幕截图时无法解析响应错误

java - 无法解决 E/RecyclerView : No adapter attached; skipping layout

android - 使用标准 Activity 创建预填充联系人

android - 平板电脑或手机 - Android

c# - 单击按钮本地化应用程序

.net - 将资源附加到 .resx 文件

来自非 Activity 类的非 Activity 类中的Android getResource?

swift - Xcode swift 资源文件夹中音频文件的路径

java服务与资源共享