[英]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.