У меня есть 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");
Однако, я должен хранить все теги в пользовательском стеке и вызвать поп () каждый раз, когда пользователь нажал задний кнопка в onBackPressed()
.
Итак, мой вопрос в том, что есть ли способ получить текущий видимый фрагмент из стека?
Примечание: Имейте в виду, что типы фрагментов разные, а не только MyFragment.
кажется, что если я делаю это в вашем пути, я должен установить * * fragmentTransaction.addToBackStack (тег) **; В противном случае я получаю исключение NullPointerException. Итак, ** fragmentManager.getBackStackEntryAt (fragmentManager.getBackStackEntryCount() - 1) .getName(); ** не ссылается на имя тега –
Да ... вам нужно будет проверить наличие нулей и неправильную математику ((getBackStackEntryCount-1)> 0 и такие).Я написал это слишком быстро. Кроме того, фрагменты, добавленные без тега, будут отображаться как null. – petey
будет ли он работать, если я использую addToBackStack (null)? – umerk44