我今晚正在开发应用程序,我注意到我有两个类似的活动,它们有不同的布局(mylayout1.xml和mylayout2.xml)......但是在这些布局中我有一些相同的元素,直到他们的ID(每个布局文件中的“@ + id / mybutton”)。
当我在一个活动中设置SessionView(R.layout.mylayout1)然后findViewById(R.id.mybutton)执行setOnClickListener()时,Android如何“知道”当我最终点击时我真正指的是哪个按钮它?
所有东西似乎都运行得很好,有适当的回调触发(而不是,据我所知,进入错误的活动 - 尽管到目前为止我的测试中一次只有一个在屏幕上(例如,对话式活动)。它发生在我身上(因为我注意到在无关的工作中这种重复),这可能只是偶然而不是设计.OTOH,如果Android很聪明,我不会担心因为这样一个元素的多个实例永远不会同时出现在屏幕上(例如OK按钮)。
答案 0 :(得分:4)
当您调用setContentView时,将解析并创建XML中的视图层次结构。当您搜索具有特定ID的视图时,android将查看该视图层次结构并搜索具有该匹配ID的视图。因此,您将永远不会得到一个视图元素,该视图元素在具有相同ID的其他.xml文件中定义,因为这些视图元素不是活动视图层次结构的一部分。
答案 1 :(得分:1)
这是因为setContentView(View)方法将文档中的活动内容设置为显式视图,而finbViewById(int id)指的是使用setContentView设置的视图对象。事实上,如果您在布局中引用未正确设置的元素,则应用程序会因空指针异常而崩溃...