У меня есть ListFragment в моей MainActivity. Вот как я установил свой объект фрагмента.
FragmentManager fragmentManager = activity.getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
Fragment newFragment = new MyFragment();
fragmentTransaction.replace(R.id.framecontainer, newFragment, "tag");
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();
Проблема заключается в том, когда пользователь нажимает кнопку "назад", мне нужно, по крайней мере, изменить панель действий и меню, вызвав
getActionBar().setTitle(title);
getActionBar().setDisplayHomeAsUpEnabled(isEnabled);
invalidateOptionsMenu();
Я должен знать, какой фрагмент показывается в данный момент, так что я знаю, как установить панель действий. Я сохраняю параметр установки в фрагменте как аргументы.
String title = fragment.getArguments().getString("KEY_TITLE");
boolean isEnabled = fragment.getArguments().getBoolean("KEY_ISENABLED");
Я выполняю поиск по соответствующему вопросу, и я понял, что могу получить фрагмент, позвонив
MyFragment fragment = (MyFragment) getSupportFragmentManager()
.findFragmentByTag("tag");
Тем не менее, я должен хранить весь тег в пользовательском стеке и вызывать pop() каждый раз, когда пользователь нажимает кнопку в onBackPressed()
.
Итак, мой вопрос в том, что есть ли способ получить текущий видимый фрагмент из стека напрямую?
Примечание. Имейте в виду, что типы фрагментов различны, а не только MyFragment.