Я использую Butterknife для привязки одного представления в одном из моих фрагментов. Я без проблем использовал Butterknife в отдельном фрагменте, но по какой-то причине в этом фрагменте связанное представление равно null. Я пытаюсь добавить к нему дочерний макет, и я получаю NPE, и я не могу понять, почему. Настройка, которую я имею в этом фрагменте, такая же, как и в другом моем фрагменте, которая работает отлично.
Это фрагмент фрагмента, включающий код 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 действительно равен нулю, и это так. Но убей меня, я не могу понять, почему.
Я могу назначить layoutHolder прямо перед тем, как добавить в него макет, и он отлично работает.
private void addLayoutToHolder(LinearLayout layout) {
layoutHolder = ButterKnife.findById(view, R.id.layoutHolder);
layoutHolder.addView(layout, 0);
}
Так что пока это работает, но я не понимаю, почему, черт возьми, Butterknife.bind в моем onCreateView неправильно привязывает представление.
Надеюсь, я достаточно хорошо описал эту проблему...
Спасибо за любое понимание.