Я работаю с последней версией Butterknife (8.2.1), и у меня есть проблема: я использую ViewPager с 3 фрагментами, когда Фрагмент воссоздается, все представления становятся нулевыми! Первые 2 фрагмента, без проблем, но когда я прокручиваю до третьего и возвращаюсь к первому, каждое представление становится нулевым. В чем может быть проблема?
Я добавил ButterKnife.setDebug(true);
Чтобы получить больше информации о проблеме, и я получаю следующее:
D/ButterKnife: Looking up view binder for com.example.overview.MeetupOverviewFragment D/ButterKnife: HIT: Cached in view binder map. D/ButterKnife: Looking up view binder for com.example.attendees.MeetupAttendeesFragment D/ButterKnife: HIT: Cached in view binder map. D/ButterKnife: Looking up view binder for com.example.attendees.ControllerListAttendees$ItemViewHolder D/ButterKnife: HIT: Cached in view binder map. D/ButterKnife: Looking up view binder for com.example.attendees.ControllerListAttendees$ItemViewHolder D/ButterKnife: HIT: Cached in view binder map. D/ButterKnife: Looking up view binder for com.example.attendees.ControllerListAttendees$ItemViewHolder D/ButterKnife: HIT: Cached in view binder map. I/InjectionManager: dispatchCreateOptionsMenu :com.example.MeetupDetailActivity I/InjectionManager: dispatchPrepareOptionsMenu :com.example.MeetupDetailActivity
Для Фрагментов (как говорит вики) я делаю это:
public class MeetupDocumentsFragment extends Fragment { @BindView(R.id.list) CustomRecyclerView recyclerView; private Unbinder unbinder; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle state) { View v = inflater.inflate(R.layout.my_layout, container, false); unbinder = ButterKnife.bind(this, v); return v; } @Override public void onDestroyView() { super.onDestroyView(); unbinder.unbind(); } }
Для RecyclerViewAdapters я использую этот код:
public class ControllerListAttendees extends RecyclerView.Adapter<ControllerListAttendees.ItemViewHolder> public static class ItemViewHolder extends RecyclerView.ViewHolder { @BindView(R.id.some_imageview) ImageView imageAvatar; @BindView(R.id.some_label1) TextView labelName; @BindView(R.id.some_label2) TextView labelSurname; @BindView(R.id.some_label3) TextView labelAge; public ItemViewHolder(View v) { super(v); ButterKnife.bind(this, v); } } }
Тем временем я мог просто установить OffscreenPageLimit ViewPager на 2, чтобы избежать отдыха, но … Я предпочел бы сделать это правильным способом 🙂
Кто-нибудь может мне с этим помочь?