Получить текущий видимый фрагмент Android

У меня есть фрагменты A -> B -> C -> D. Каждый фрагмент с помощью метода onCreateView изменяет переменную String в основном действии. Все работает нормально при переходе от A к B, C или D, но когда я нажимаю кнопку «Назад», например, от C к B, мне нужно обновить переменную MainActivity до правильного значения. Как я могу этого добиться? onResume(), onStart(), onCreateView не вызываются, когда я возвращаюсь к предыдущим фрагментам.

Редактировать, BCD - это тот же фрагмент класса, и он может быть и фрагментом, потому что я реализую каталог папки с каталогом подпапки BCD. Думаю, я не могу использовать теги, потому что не знаю, сколько у меня фрагментов.


person Alessio Crestani    schedule 05.09.2014    source источник


Ответы (2)


Посмотрите этот пример: https://stackoverflow.com/a/24042109/2413303

По сути, укажите идентификатор ресурса в конструкторе фрагмента:

public MyFragment()
{
    super();
    titleId = R.string.drawer_myfragment_title;
}

Добавьте следующий интерфейс (добавлено в редактировании):

public interface GetActionBarTitle
{
    int getActionBarTitleId();
}

Верните это с интерфейсом:

public class MyFragment extends Fragment implements GetActionBarTitle
{
   private int titleId;

   @Override
   public int getActionBarTitleId()
   {
       return titleId;
   }
}

И в действии добавьте к методу onCreate() следующее:

getSupportFragmentManager().addOnBackStackChangedListener(new OnBackStackChangedListener()
{
    public void onBackStackChanged()
    {
        int backCount = getSupportFragmentManager().getBackStackEntryCount();
        if (backCount == 0)
        {
            finish();
        }
        else
        {
            Fragment fragment = getSupportFragmentManager().findFragmentById(R.id.container);
            mTitle = getString(((GetActionBarTitle) fragment).getActionBarTitleId());
            getSupportActionBar().setTitle(mTitle);
        }
    }
});
person EpicPandaForce    schedule 05.09.2014
comment
реализует GetActionBarTitle, выдает ошибку, я не могу его использовать. - person Alessio Crestani; 08.09.2014

Вы можете объявить метод в YourActivity для обновления.

И во фрагменте просто приведите Activity к вашему и вызовите метод.

Например, в YourActivity объявите метод:

public void refreshMe(){
...
}

Итак, в вашем фрагменте вы можете позвонить:

((YourActivity)getActivity()).refreshMe();
person Suvitruf - Andrei Apanasik    schedule 05.09.2014
comment
Ok. Когда я могу вызвать этот метод? - person Alessio Crestani; 05.09.2014
comment
@user3793870 в onActivityCreated(), например - person Suvitruf - Andrei Apanasik; 05.09.2014