视图标识符的范围是什么?
它的相应活动是否是本地的?
例如,如果在 activity_main.xml 中,我指定
<EditText android:id="@+id/edit_message" />
在我的 DisplayMessageActivity.java 中,我是否可以合法访问R.id.edit_message
?
当我测试这个时,我得到一个例外,但是没有一条消息清楚地告诉我这是因为访问了“id out of context”,或者说是这样的。我收到了java.lang.NullPointerException
当我跟随初学者教程时出现了这个问题:
修改
感谢两者澄清了R.id
的范围与ID为R.id.edit_message
的小部件范围之间的差异(就fiewViewById()
访问它而言)。
我实际上打算问“我能在活动A中调用findViewById(R.id.edit_message)来访问活动B中的小部件”。从你的答案来看,这个问题的答案似乎是“不”。
在我的代码中,我没有在活动B的ViewGroup中包含id为R.id.edit_message
的视图。这可能是我收到错误的原因。
答案 0 :(得分:2)
视图标识符的范围是什么?
标识符是整数。它没有范围。
在我的DisplayMessageActivity.java中,我是否可以合法地访问R.id.edit_message?
如果我们假设您的意思是&#34;我是否可以致电findViewById(R.id.edit_message)
来访问小部件?&#34;,您当然可以调用它。是否获得null
取决于活动是否在其视图层次结构中具有该ID的小部件。
但是,活动A无法调用findViewById()
从活动B中检索窗口小部件.id是一个整数,没有范围。但是, findViewById()
有一个范围:您调用它的视图层次结构(例如,活动,ViewGroup
)。
答案 1 :(得分:1)
您使用XML输入的任何ID都将被处理并放入R.java
文件中的唯一整数值(您不应编辑)。 ID值尤其会进入R.id
,就像R.layout
标识的布局XML文件一样。
要回答您的问题,范围是全球性的。至少在哪里可以
import your.package.name.R;
例如,您有两个活动,每个活动都有EditText
android:id="@+id/edit_message"
在这种情况下,您可以在两个活动中使用findViewById(R.id.edit_message)
,但R.id.edit_message
的值相同。
就“范围”而言,findViewById()
是YourActivity.this.findViewById()
的简写,因此您将搜索当前活动的内容视图。
因为你得到了例外。很难说。一种可能性是您使用错误的XML布局setContentView()
而findViewById()
返回null。您可以阅读文档中的原因。