2012-10-25 42 views
2

如果您能夠調用view.getContext()返回當前呈現視圖實例的Activity的上下文,爲什麼一些View family方法將Context作爲參數?什麼時候View方法的Context參數不等於.getContext()

當getContext()與傳遞給這些方法之一的上下文不同時,這不是隱含的,還是有occassions?

下面是一個例子:http://developer.android.com/reference/android/widget/ViewAnimator.html#setInAnimation(android.content.Context, int)

非常感謝清理這件事

回答

0

view.getContext()實際回報是你的活動的情況下,不應用程序。這就是您在初始化新視圖時需要提供此類上下文的原因。

這兩種情況有所不同。活動的上下文被附加到該特定活動的生命週期。但是,應用程序的上下文是指應用程序的生命週期。

欲瞭解更多信息,請閱讀this

+0

謝謝,我編輯了這個問題..我想我暗示活動上下文時使用了術語「應用程序」。這將始終與.getContext()相同。 哦,我剛剛看到你的更新..所以有情況時,可能會有所不同? – ComethTheNerd

+0

view.getContext將始終返回其可見的Activity的上下文。因此,爲了定義新視圖,您需要在初始化時識別上下文。 – waqaslam

+0

好吧,我知道了,但是如果Android運行時持有一個currentContext值,並且每個新的Activity的上下文都更新了這個值,那麼Views初始化時是不是隻依賴讀取這個值? – ComethTheNerd

0

我最近讀了一些返回IBinder的API,如getWindowToken()getApplicationWindowToken()。引用後者:

檢索一個唯一的標記,標識該視圖附加到的 窗口的頂級「真實」窗口。也就是說,這就像 getWindowToken(),除非這個視圖的窗口是一個面板窗口 (連接到另一個包含窗口),否則返回包含窗口的標記 。

也許這個IPC機制與View API有關。 Android設計師不是愚蠢的或熱心的:如果他們需要Context來構建View,這意味着他們需要一個Context,所以構建一個View必須可能具有應用程序上下文,服務上下文和 - 當然! - 一個活動環境,但不需要活動Context只是一個檢索資源,訪問數據庫,構建意圖等的傘形API。

這不是你的問題的答案,但也許可以作爲幫手。我正在尋找答案。希望你的問題得到應有的重視。

+0

感謝您的意見和有用的資源。自從我第一次訪問Android以來,這一直讓我深思。我都是爲了更簡潔,更簡單的代碼,所以只是想知道Context參數是不必要的並且可以被隱式確定。這似乎是比我第一次想到的更復雜的問題! – ComethTheNerd

+0

視圖不僅限於活動。它們可以被添加到碎片,對話框,吐司等內部。其中,上下文是共同的分母。這就是爲什麼它返回上下文而不是參考活動。 – waqaslam

+0

@Waqas它並不意味着任何可以添加View的東西......你可以編寫你的ViewRecyclerBin並添加視圖,什麼?關鍵是,當你構建一個'View'時,你必須提供一個'Context':對話不是上下文,toast不是上下文,而fragment則不是上下文。 'Context'不是任何東西的通用屬性,它只是一個[傘形API](http://developer.android.com/reference/android/content/Context.html)來獲取主題,資源,數據庫,意圖等等 – Raffaele

相關問題