Как узнать, какой фрагмент сейчас на экране?

225
20 апреля 2017, 15:00

Пробовал так:

    private Fragment currentFragment;
        @Subscribe
            public void changeFragment(EChangeFragment event){
                Fragment fragment = event.getFragment();
                if(fragment.equals(currentFragment)) {
                    Log.d("mytag", "MainPresenter.changeFragment() already that fragment");
                    return;
                }
                currentFragment = fragment;
fragmentTransaction = fragmentManager.beginTransaction();
            if(event.isAddToBackStack()) fragmentTransaction.addToBackStack(null);
            fragmentTransaction.setTransition(TRANSIT_FRAGMENT_FADE);
            setNewFragment(fragment);
            hideNavigationMenu(event.isHideMenu());
            fragmentTransaction.commit();
        }

Но это не помогает! В if мы никогда не заходим.

Пробовал и такой способ:

@Subscribe
    public void changeFragment(EChangeFragment event){
        Fragment fragment = event.getFragment();
        if(fragment.equals(getCurrentFragment())) {
            Log.d("mytag", "MainPresenter.changeFragment() already that fragment");
            return;
        }
        fragmentTransaction = fragmentManager.beginTransaction();
        if(event.isAddToBackStack()) fragmentTransaction.addToBackStack(null);
        fragmentTransaction.setTransition(TRANSIT_FRAGMENT_FADE);
        setNewFragment(fragment);
        hideNavigationMenu(event.isHideMenu());
        fragmentTransaction.commit();
    }
    private Fragment getCurrentFragment(){
       return fragmentManager.findFragmentById(R.id.content);
    }

Тоже не помогает. Мне надо проверять текущий фрагмент на экране, чтобы при клике на меню открывался другой фрагмент, однако если новый же фрагмент- тот, который на экране, ничего не делать

UPD:

Как отправляется эвент с изменением фрагмента:

private void openIntroducingFragment(){
        getSupportActionBar().hide();
        setContentFullscreen();
        EventBus.getDefault().post(new EChangeFragment(new IntroducingFragment(), DONT_ADD_TO_BACKSTACK,
                HIDE_TOOLBAR, HIDE_MENU));
    }

EChangeEvent.java

public EChangeFragment(Fragment fragment, boolean addToBackStack, boolean deprecated, boolean hideMenu){
    this.fragment = fragment;
    this.addToBackStack = addToBackStack;
    this.hideMenu = hideMenu;
}
Answer 1

На экране может находиться несколько фрагментов, поэтому нативного метода узнать фрагмент существует несколько:

  • По тэгу (который передаётся в момент транзакции с фрагментом)
  • По resource id, к которому привязан фрагмент

Таким образом, вы сами должны обеспокоиться о том, чтобы хранить "актуальный" фрагмент отдельно

Вообще, стоит подумать об архитектуре, раз такое приходится делать:)

READ ALSO
Доступ к Tomcat Manager

Доступ к Tomcat Manager

На выделенном сервере установил tomcatЗахожу по адресу IP или по домену (установил в server

315
Подключение SSL-сертификата к tomcat

Подключение SSL-сертификата к tomcat

Есть SSL-сертификат, полученный от regru

185
Приоритетность выполнения операций java

Приоритетность выполнения операций java

В теле main запускаю цикл (на 50 итераций), в теле которого вывод текста на экран и вброс команд в потокПри компиляции выводит сперва 50 строк текста...

186