Интерфейс Ссылка на объект NULL Связь с фрагментом путем реализации интерфейса в действии?

Попытка вызвать метод интерфейса для ссылки на нулевой объект. In Activity Объявлен интерфейс и реализован во фрагменте. Когда реализованный метод вызывается щелчком по вкладке, вызывая ошибку.

Действия

    private  HistoryListener listener;

    public interface HistoryListener{

        public void onSelect();
    }

TabselectedСлушатель активности

    tabLayout.addOnTabSelectedListener(new TabLayout.BaseOnTabSelectedListener() {
                @Override
                public void onTabSelected(TabLayout.Tab tab) {
                    switch(tab.getPosition()) {
                        case 0:
                           break;
                        case 1:
                            break;
                        case 2:
                            Log.d("Tab", "onTabSelected: " +tab.getPosition());
                            listener.onSelect();
                            break;

                    }
                }

                @Override
                public void onTabUnselected(TabLayout.Tab tab) {

                }

                @Override
                public void onTabReselected(TabLayout.Tab tab) {

                }

Фрагмент

    class Fragment implements Activity. HistoryListener{

          @Override
            public void onSelect() {


            }

        }

person Swamy    schedule 07.11.2019    source источник
comment
Откуда вы инициализируете listener?   -  person Md. Asaduzzaman    schedule 07.11.2019
comment
@ Md.Asaduzzaman тебя не достал   -  person Swamy    schedule 07.11.2019
comment
Вы используете listener.onSelect(); внутри addOnTabSelectedListener. Откуда вы устанавливаете значение слушателя? Вероятно, это null, поэтому вы получаете исключение   -  person Md. Asaduzzaman    schedule 07.11.2019
comment
Также какой адаптер вы используете в ViewPager? Пожалуйста, добавьте код настройки ViewPager и Tab. Если есть возможность, то переходник   -  person Md. Asaduzzaman    schedule 07.11.2019
comment
@ Md.Asaduzzaman, как затем инициализировать интерфейс в действии   -  person Swamy    schedule 07.11.2019
comment
@ Md.Asaduzzaman FragmentPagerAdapter   -  person Swamy    schedule 07.11.2019
comment
Ознакомьтесь с моим решением и дайте мне знать   -  person Md. Asaduzzaman    schedule 07.11.2019
comment
Вам необходимо предоставить код, который инициализирует listener. Если вы используете FragmentPagerAdapter, вы также должны предоставить для этого код.   -  person EpicPandaForce    schedule 07.11.2019


Ответы (1)


вам нужно инициализировать слушателя в метод onAttach (Context context) во фрагменте

 @Override
    public void onAttach(Context context) {
        super.onAttach(activity);
       try{
      listener = (HistoryListener) context;
          } catch(Exception e){
               throw new ClassCastException(context.toString()
                    + " must implemenet HistoryListener.onSelect()");
          }

        } 
    }
person Vasudev Vyas    schedule 07.11.2019