2012-09-14 69 views
4

我有一個適配器,它擴展了ArrayAdapter<T>並且想要注入到它們中LayoutInflater。下面的代碼提交,但吹氣總是nullRoboguice注入適配器

public abstract class MyAdapter<T> extends ArrayAdapter<T> { 

    @Inject 
    protected LayoutInflater inflater; 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     // inflater here is null 
    } 
} 

回答

5

也許你已經創建MyAdapter實例與new,而不是將其注入的。

在這種情況下,我不會推薦注入LayoutInflater,除非您想使用此類的不同實現,例如模擬LayoutInflater進行測試。

獲取實例中的構造函數:

inflater = LayoutInflater.from(context); 

這將是更有效的。我看不到注入LayoutInflater有任何好處。
依賴注入是好的,但不要在沒有必要和緩慢時使用它。

+0

是我創造我的適配器實例與'new'因爲我應該把參數傳遞到構造函數。我如何將它注入活動?我如何選擇需要的構造函數並將參數傳遞給它? –

+0

將args傳入構造函數:http://stackoverflow.com/questions/9237996/pass-parameter-to-constructor-with-guice 或'injectMembers':http://stackoverflow.com/questions/5116383/guice- injectmembers-method 這兩種解決方案在你的情況是醜陋的:) – pawelzieba

5

注入依賴任何類

RoboGuice.getInjector(context).injectMembers(this); 

在構造函數中使用,只需要語境, 偉大的作品對我來說