2

我正在使用Butterknife在我的一個片段中綁定單個視圖。我已經使用Butterknife在單獨的片段中沒有問題,但由於某種原因,在此片段中,綁定視圖爲空。我正在嘗試添加一個子佈局,並且正在接收NPE,但我無法弄清楚原因。我在這個片段中的設置與我在其他片段中完全一樣的設置相同。當在片段中使用Butterknife時,綁定視圖爲空

這是包含Butterknife代碼片段的片段。

private View view; 
@BindView(R.id.layoutHolder) 
LinearLayout layoutHolder; 

public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
    // Inflate the layout for this fragment 
    view = inflater.inflate(R.layout.fragment_log, container, false); 
    ButterKnife.setDebug(true); 
    ButterKnife.bind(this, view); 
    return view; 
} 

這是拋出NPE的方法。

private void addLayoutToHolder(LinearLayout layout) { 
    layoutHolder.addView(layout, 0); 
} 

以下是錯誤:

java.lang.NullPointerException: Attempt to invoke virtual method 
'void android.widget.LinearLayout.addView(android.view.View, int)' 
on a null object reference 

at com.omitted.LogFragment.addLayoutToHolder(LogFragment.java:101) 

下面是Butterknife.setdebug輸出,這似乎是罰款。

Looking up view binder for com.omitted.LogFragment 
HIT: Loaded view binder class. 
Looking up view binder for com.omitted.CalculatorFragment 
HIT: Loaded view binder class. 

我也檢查,以確保layoutHolder確實爲null,它是。但對於我的生活,我無法弄清楚爲什麼。

我可以在向它添加布局之前分配layoutHolder,它工作得很好。

private void addLayoutToHolder(LinearLayout layout) { 
    layoutHolder = ButterKnife.findById(view, R.id.layoutHolder); 
    layoutHolder.addView(layout, 0); 
} 

所以它適用於現在,但我不明白爲什麼在地獄Butterknife.bind我onCreateView沒有正確結合的觀點。

我希望我能夠很好地描述這個問題...

感謝您的任何見解。

+0

差不多一個星期。沒有人有任何想法? –

+0

是一個問題解決了嗎?\ – piotrek1543

回答

0

我的猜測是你在ButterKnife綁定發生之前調用addLayoutToHolder,這就是爲什麼layoutHolder爲null的原因。 您在調用生命週期中的哪個方法?

2

我有同樣的問題,我解決它將butterknife編譯器添加爲apt。 你可以看到它在ButterKnife

0

readme我發現,使插孔編譯選擇在gradle這個與

... 
jackOptions.enabled = true 
... 

某處butterknife後無法找到該視圖粘結劑和觀點總是空。

相關問題