Привязка к просмотру с быстрым переключением фрагментов равна нулю

#android #android-fragments #data-binding #android-viewbinding

#Android #android-фрагменты #привязка к данным #android-привязка к просмотру

Вопрос:

У меня есть 2 фрагмента в макете вкладки, быстрое переключение между ними приводит к тому, что представления возвращаются как null, используя привязку к просмотру. Это из-за задержки при создании класса FragmentXBinding?

Пример использования:

 chatadapter.registerAdapterDataObserver(new RecyclerView.AdapterDataObserver() {
            @Override
            public void onItemRangeInserted(int positionStart, int itemCount) {
                binding.chatRecyclerView.smoothScrollToPosition(0);
            }
        });
  

Ошибка:

 java.lang.NullPointerException: Attempt to read from field 'androidx.recyclerview.widget.RecyclerView com.iku.databinding.FragmentChatBinding.chatRecyclerView' on a null object reference
  

Комментарии:

1. Ваше binding значение null . убедитесь, что вы инициализируете привязку представления внутри onCreateView

2. это внутри onCreateView , и я получаю это при очень быстром переключении между фрагментами.

3. оооо .. в этом случае инициализируйте свою привязку внутри onViewCreated(...)

4. @chandmohd это не работает

5. @ThomasBernhard Я не был полностью! Но лучше поместить код, связанный с привязкой к просмотру, в onViewCreated(..) , и пришлось удалить несколько прослушивателей в реальном времени в приложении, чтобы избежать этого NPE. Даже отсоединение прослушивателя в onStop()

Ответ №1:

FragmentX

  FragmentXBinding binding;


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    binding = FragmentChatBinding.inflate(inflater, container, false);
    init();
    return binding.getRoot();
}

 private void init() {
    // all initialization 
}
  

Это помогает мне решить мою ошибку с нулевой ссылкой