使用 Fragments recover Home/Drawer 按钮
Using Fragments recover Home/Drawer Button
我有一个应用程序,其主 activity 加载了一个导航抽屉,还有一对片段加载到 activity ...
在导航抽屉中,我有 4 个选项 A、B、C 和 D ...第一个在我的 activity 上加载 FragmentA,最后 3 个加载 FragmentB ..
FragmentA 显示元素列表,并且在 selecting 这些元素之一时 FragmentB 用于加载其内容...我想在从 FragmentA 启动时将 FragmentB 上的主页 (hamburger/drawer) 图标更改为向上图标(并且更改相应的行为以在 select 上创建一个 popstack)。我对此使用 setDisplayHomeAsUpEnabled(true)
没有任何问题,但是由于所有这些都发生在一个 activity 中,如果我然后 select 导航抽屉中的另一个选项(比如 B)向上图标仍将显示(它也显示在弹出的片段上)...
如果我使用 setDisplayHomeAsUpEnabled(false)
所有这一切都是从工具栏中隐藏 home/up 按钮,我需要恢复主页按钮并确保它会在 FragmentB 时显示从抽屉菜单启动...
这个问题对任何人来说都是响铃吗?还是我只是以错误的方式使用片段? .. 任何建议将不胜感激
编辑
这或多或少是我在代码中的内容
在 Main Activity .. 作为抽屉的 onNavigationItemSelected(MenuItem item) 我有这样的东西...
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();
根据选项 selected..
要加载的片段select
在 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();
在堆栈中保存片段
在 onResume() 函数内的 fragmentB 中,我得到了类似...
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);*/
}
因此,当我创建 fragmentB 时,我检查参数并查看它是否来自 fragmentA(我也可以检查 fragmentmanager backstack 并查看是否有东西)...我只是将抽屉图标更改为setDisplayShowHomeEnabled(true) ...如果我 return 到 FragmentA(通过 onBackPressed())FragmentA 显示箭头,我需要它来显示原始抽屉图标 ...如果我 select抽屉菜单中的一个选项...
这是否使我的问题更加清晰?...我在那里有一些注释代码,因为它不起作用..如果我使用 setDisplayHomeAsUpEnabled(false) 激活该行..图标就会从 activity 中消失(据我所知,这是函数的预期结果)...
过了一段时间我终于找到了这个post
Switching between Android Navigation Drawer image and Up caret when using fragments
我想当在界面中涉及抽屉时,您可能需要用该组件处理这个问题...这个 post 给了我答案。
特别注意 Wolfram Rittmeyer
的最后评论
我有一个应用程序,其主 activity 加载了一个导航抽屉,还有一对片段加载到 activity ... 在导航抽屉中,我有 4 个选项 A、B、C 和 D ...第一个在我的 activity 上加载 FragmentA,最后 3 个加载 FragmentB ..
FragmentA 显示元素列表,并且在 selecting 这些元素之一时 FragmentB 用于加载其内容...我想在从 FragmentA 启动时将 FragmentB 上的主页 (hamburger/drawer) 图标更改为向上图标(并且更改相应的行为以在 select 上创建一个 popstack)。我对此使用 setDisplayHomeAsUpEnabled(true)
没有任何问题,但是由于所有这些都发生在一个 activity 中,如果我然后 select 导航抽屉中的另一个选项(比如 B)向上图标仍将显示(它也显示在弹出的片段上)...
如果我使用 setDisplayHomeAsUpEnabled(false)
所有这一切都是从工具栏中隐藏 home/up 按钮,我需要恢复主页按钮并确保它会在 FragmentB 时显示从抽屉菜单启动...
这个问题对任何人来说都是响铃吗?还是我只是以错误的方式使用片段? .. 任何建议将不胜感激
编辑 这或多或少是我在代码中的内容
在 Main Activity .. 作为抽屉的 onNavigationItemSelected(MenuItem item) 我有这样的东西...
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();
根据选项 selected..
要加载的片段select在 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();
在堆栈中保存片段
在 onResume() 函数内的 fragmentB 中,我得到了类似...
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);*/
}
因此,当我创建 fragmentB 时,我检查参数并查看它是否来自 fragmentA(我也可以检查 fragmentmanager backstack 并查看是否有东西)...我只是将抽屉图标更改为setDisplayShowHomeEnabled(true) ...如果我 return 到 FragmentA(通过 onBackPressed())FragmentA 显示箭头,我需要它来显示原始抽屉图标 ...如果我 select抽屉菜单中的一个选项... 这是否使我的问题更加清晰?...我在那里有一些注释代码,因为它不起作用..如果我使用 setDisplayHomeAsUpEnabled(false) 激活该行..图标就会从 activity 中消失(据我所知,这是函数的预期结果)...
过了一段时间我终于找到了这个post
Switching between Android Navigation Drawer image and Up caret when using fragments
我想当在界面中涉及抽屉时,您可能需要用该组件处理这个问题...这个 post 给了我答案。
特别注意 Wolfram Rittmeyer