バターナイフを使用して、フラグメントの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では正しく表示結合されていない理由を私は理解していません。
私は...任意の洞察力のための
感謝を十分にこの問題を説明したいと考えています。
ほぼ一週間です。誰も考えていない? –
は解決された問題ですか?\ – piotrek1543