2013-08-02 57 views
0

我想設置一個不擴展Activity類的幫助類。我如何得到一個包含getPackageManager()的packagemanager對象。我怎樣才能做到這一點?如果我不在Android/Java中擴展活動類,如何獲得packagemanager對象?

爲什麼我需要這個?那麼我想安裝這個助手類,我試圖用我的助手類擴展Activity。不過,由於我的幫助對象爲null,我總是得到一個nullpointerexceptions。

任何提示?

+1

你可以發佈你使用的代碼嗎? – whitfin

+0

您可能會在活動上下文中實例化此Helper類,爲什麼不將'getPackageManager()'返回傳遞給Helper構造函數或甚至當前活動的this呢? – Voicu

+0

@Voicu這可能是一個想法,通過上下文而不是回報,因爲它可能需要再次從這種情況除外 – whitfin

回答

1

通常,最好的方式來做你想做的事情,將Context傳遞給你的新類的構造函數。這樣你就可以用它來調用屬於Activity的方法。

下面是一個例子,它應該幫助你鍛鍊你的問題:

new HelperClass(this); 

雖然:

private Context context; 

// ... 

public HelperClass(Context c){ 
    context = c; 
} 

// ... 

context.getPackageManager(); 

然後,您可以只需添加你的背景下,當你初始化新類調用它在某些情況下,如來自片段,您可能需要提供getActivity();

new HelperClass(getActivity()); 

請嘗試編輯您的班級,如上所示,讓我們知道,如果你看到任何改進。

正如在評論中提到的,除非你打算使用你的上下文來編輯視圖等,你最好在你的構造函數中使用context = c.getApplicationContext();

+0

請注意,除非你真的,真的需要一個活動上下文(例如,你將創建視圖,你需要應用一個主題),你應該做'context = c.getApplicationContext()'在HelperClass中。 – Delyan

+0

在助手類中維護對「Context」的引用時要小心 - 它可能是內存泄漏的原因。 – Squonk

+0

@Delyan點採取,我會編輯 – whitfin

相關問題