[英]Are view ids local to the activity context?
视图标识符的范围是什么?
它是否局限于其相应的活动?
例如,如果在activity_main.xml中,我指定
<EditText android:id="@+id/edit_message" />
在我的DisplayMessageActivity.java中 ,我可以合法地访问R.id.edit_message
吗?
当我对此进行测试时,我得到了一个例外,但是没有一条消息清楚地告诉我这是由于访问“上下文无关的ID”或类似的东西。 我收到类似java.lang.NullPointerException
错误
当我遵循初学者教程时,出现了这个问题:
EDIT都感谢您澄清R.id
的范围和ID为R.id.edit_message
的小部件的范围之间的R.id.edit_message
(就通过fiewViewById()
进行访问而言)。
我实际上是想问“我是否能够在活动A中调用findViewById(R.id.edit_message)来访问活动B中的小部件”。 从您的答案看来,该问题的答案是“否”。
在我的代码中,我没有在活动B的ViewGroup中包含ID为R.id.edit_message
的视图。这可能就是我得到错误的原因。
视图标识符的范围是什么?
标识符是整数。 它没有范围。
在我的DisplayMessageActivity.java中,我可以合法地访问R.id.edit_message吗?
如果我们假设您的意思是“我是否可以调用findViewById(R.id.edit_message)
来访问小部件?”,则可以肯定地调用它。 是否为null
取决于活动在其视图层次结构中是否具有带有该ID的小部件。
但是,活动A无法调用findViewById()
从活动B中检索小部件。该ID是整数,没有作用域。 但是, findViewById()
的作用域是:您对其调用的对象(例如,活动, ViewGroup
)的视图层次结构。
您使用XML输入的任何id都会被处理,并放入R.java
文件中的唯一整数值中(您不应编辑)。 ID值尤其进入R.id
,就像R.layout
标识您拥有的布局XML文件一样。
为了回答您的问题,范围是全球性的。 至少在任何地方
import your.package.name.R;
例如,您有两个活动,每个活动都有一个带有android:id="@+id/edit_message"
的EditText
。
在那种情况下,您可以在两个活动中使用findViewById(R.id.edit_message)
,但是R.id.edit_message
的值是相同的。
就“作用域”而言, findViewById()
是YourActivity.this.findViewById()
的简写,因此您将搜索当前Activity的内容视图。
由于这个原因,您得到了例外。 很难说。 一种可能是您对setContentView()
使用了错误的XML布局,并且findViewById()
返回null。 您可以阅读文档以了解原因。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.