2

バターナイフを使用して、フラグメントの1つのビューでバインドします。 Butterknifeを別のフラグメントで使用しましたが、何らかの理由でこのフラグメントでバインドされたビューがnullです。私はそれに子供のレイアウトを追加しようとしています、そして、私はNPEを受け取りました、そして、私は理由を理解することができません。私がこの断片で持っているセットアップは、完璧に動作する私の他の断片と同じです。フラグメント内にバターナイフを使用すると、バインドされたビューがnullになります

これは、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

私は同じ問題を抱えていました。私はそれを解決するために、バターナイフコンパイラをaptとして追加しました。 あなたは、私が

... 
jackOptions.enabled = true 
... 

でのGradleでジャックコンパイラオプションを有効にした後、どこかbutterknifeは、ビューのバインダーを見つけるために失敗し、ビューは常にnullであることがわかっButterKnife

0

readmeでそれを見ることができます。

関連する問題