繁体   English   中英

视图ID是否在活动上下文本地?

[英]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错误

当我遵循初学者教程时,出现了这个问题:

https://developer.android.com/training/basics/firstapp/building-ui.html

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM