簡體   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