我需要在我的應用程序中使用大多數模塊的getString()。如何使用Android的getString()而不違反基本的OOD原則?
但出於一些奇怪的原因,它是tied to Application or Context,所以這意味着我需要傳遞給我的應用程序中的每個類,即Application引用作爲參數。
這明顯是violates面向對象設計的最基本原理之一。
有沒有辦法解決這個問題?
我需要在我的應用程序中使用大多數模塊的getString()。如何使用Android的getString()而不違反基本的OOD原則?
但出於一些奇怪的原因,它是tied to Application or Context,所以這意味着我需要傳遞給我的應用程序中的每個類,即Application引用作爲參數。
這明顯是violates面向對象設計的最基本原理之一。
有沒有辦法解決這個問題?
是的,有一個解決辦法 - 如果你恰巧(或可以)通過視圖(任何View派生類)的構造函數,將其分配給一個數據成員,然後你可以從任何地方訪問字符串資源類:
String str_via_res = yourView.getContext().getString(R.string.str_via_res);
否則,你將有一個上下文傳遞到每個需要這些字符串資源訪問類。
謝謝!你的提示實際上對我很好,因爲我所有的課程都已經有了一些視圖。 +1 – ateiob
供參考:你將仍然使用這種方法泄漏內存。觀點「可以參考整個活動,因此也可以參考您的活動所持有的任何內容」。 http://android-developers.blogspot.com/2009/01/avoiding-memory-leaks.html –
'奇怪的原因'是由於字符串資源與你的應用程序綁定在一起,沒有某種處理方式(上下文)就無法訪問它們。如果大部分不是活動的類都需要訪問字符串資源,則可能需要重新考慮一下設計。一個不依賴於Context
的簡單方法是加載字符串並將它們傳遞給構造函數中的類。
+1對** ...你可能想重新考慮一下你的設計。** – Squonk
您可以擴展android.app.Application
類來創建一個靜態方法,以在應用程序中的所有類上傳遞上下文。
「我需要傳遞給我的應用程序中的每個類,將Application對象作爲參數。」 - 你不會傳遞'對象',你會傳遞一個'引用'給對象。雖然這可能會有一些有害的影響,如果你不以正確的方式來處理它,我不明白如何傳遞對象的引用的概念「明顯違反了面向對象設計的最基本原則之一」。如果我們不將對象的引用作爲參數傳遞給其他對象的方法,那麼OOP將不存在。 – Squonk
呵呵,請引用一個參考來解釋爲什麼你認爲它違反了面向對象設計(OOD,它實際上與OOP不同)的最基本原則之一。 – Squonk
http://stackoverflow.com/questions/2993817/is-it-a-good-practice-to-create-a-reference-to-application-context-and-use-it-any – ateiob