У меня есть приложение с основным действием, которое загружает навигационный ящик и пару фрагментов, которые загружаются в этом действии... В навигационном ящике у меня есть 4 варианта A, B, C и D... первый загружает FragmentA на мою активность и последние 3 загрузки FragmentB ..
FragmentA отображает список элементов, и при выборе одного из этих элементов FragmentB используется для загрузки его содержимого... Я хочу изменить значок дома (гамбургер/ящик) на FragmentB для значка вверх при запуске из FragmentA (и измените соответствующее поведение, чтобы сделать popstack при выборе). У меня нет проблем с этим, используя setDisplayHomeAsUpEnabled(true)
, но поскольку все это происходит внутри одного действия, если я затем выберу еще один вариант (скажем, B) из навигационного ящика, значок вверх все равно будет отображаться (он также отображается на выскочившем фрагменте)... если я использую setDisplayHomeAsUpEnabled(false)
, все это делается скрыть кнопку «Домой/Вверх» на панели инструментов, мне нужно восстановить кнопку «Домой» и убедиться, что она будет отображаться при запуске FragmentB из меню ящика...
Эта проблема никому не звонит? или я просто неправильно использую фрагменты? .. любые советы будут оценены
ИЗМЕНИТЬ это более или менее то, что у меня есть в коде
В основном действии.. как onNavigationItemSelected (элемент MenuItem) для ящика у меня есть что-то вроде этого...
switch(optionNumber) {
case 0:
fragment = FragmentA.newInstance(optionNumber);
break;
default:
fragment = FragmentB.newInstance(optionNumber);
break;
}
Fragment frag = fragmentManager.findFragmentByTag("current_fragment");
if (frag != null && frag.getClass() == FolderFragment.class){
((FolderFragment)frag).resetScroll();
}
fragmentManager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
fragmentManager.beginTransaction().replace(R.id.content, fragment, "current_fragment").commit();
который выбирает фрагмент для загрузки в соответствии с выбранной опцией.
В FragmentA я вызываю FragmentB с помощью этого ..
FragmentB fFragment = FragmentB.newInstance(position);
Bundle args = new Bundle();
args.putString("filter", "something"); fFragment.setArguments(args);
mActivity.getSupportFragmentManager().beginTransaction()
.replace(R.id.flContent, fFragment, "current_fragment")
.addToBackStack(null)
.commit();
Сохранение фрагмента в стеке
И во фрагменте B внутри функции onResume() я получил что-то вроде...
String filter = getArguments().getString("filter", null);
if (type != null) {
mActivity.setTitle(title);
mActivity.getSupportActionBar().setDisplayShowHomeEnabled(true);
}else {
/*mActivity.getSupportActionBar().setDisplayHomeAsUpEnabled(false);
mActivity.getSupportActionBar().setDisplayShowHomeEnabled(true);
mActivity.getSupportActionBar().setHomeButtonEnabled(true);
mActivity.getSupportActionBar().setIcon(R.mipmap.ic_menu);*/
}
Поэтому, когда я создаю фрагмент B, я проверяю аргументы и смотрю, исходит ли он из фрагмента A или нет (я также мог бы проверить задний стек менеджера фрагментов и посмотреть, есть ли что-то)... там я просто меняю значок ящика с помощью setDisplayShowHomeEnabled(true) . .. оставив стрелку назад, если я вернусь к FragmentA (через onBackPressed()) FragmentA показывает стрелку, и мне нужно, чтобы она отображала исходный значок ящика... то же самое происходит, если я выбираю параметр в меню ящика... Это дает больше ясности моей проблеме?... У меня есть код с комментариями, потому что он не работает. результат функции, насколько я знаю)...