我必须实现类似于Instagram Android客户端中使用的导航系统.
到目前为止我想出的是以下内容:
我陷入困境,无法弄清楚如何在背面按下时切换片段,以及如何在显示更深的视图而不是选项卡的主视图时处理标签导航.
我正在考虑为每个标签使用我自己独立的"backstack实现".当用户在选项卡中更深入地导航时,我会生成一个唯一的"标记",并在调用addToBackStack()时使用该标记,并将标记放在我实现的"backStack"中.如果用户再次导航到此选项卡,我可以检查该选项卡的"backStack"中是否有任何标签,如果是,则在MainActivity的fragmentManager中的真实backStack中查找该条目,然后切换到它.
我还没有想出更好的东西.是否有更好/更简单的方法来实现上述行为?我错过了什么吗?(我知道这在Android世界中是非常糟糕的应用程序设计,但这是另一个问题)
我发布了一个答案,因为这个问题已经死了,但结论可能对其他人有帮助.
我们最终坚持使用老式的NavgationDrawer模式,效果很好.但与此同时,我必须实现一个库项目,它为托管应用程序提供了一个Fragment,它有自己的自定义逻辑.然后,此片段使用其ChildFragmentManager在其自身内添加另一个片段.ChildFragmentManager移植到Android Support v4 lib中,因此您可以在任何地方基本使用它.
因此,假设您需要x菜单点,您可以在其中进行更深入的导航.这些将是片段使用他们自己的ChildFragmentManagers添加其他片段以在该菜单中更深入导航.ChildFragmentManagers有自己的后台,所以你不必担心处理状态.如果选择了另一个菜单,您可以在MainActivitys FragmentManager中查找相应的片段,然后返回到它,如果尚未添加,则添加它.
请注意,您必须自己实现后退功能,因为ChildFragmentManagers不会自动获取backPressed事件.您可以通过处理MainActivity中的onBackPressed事件来完成此操作.
@Override
public void onBackPressed() {
boolean handled = false;
if(getFragmentManager().getBackStackEntryCount() == 0){
// No menu added
return super.onBackPressed();
}
Fragment frag = getFragmentManager().getBackStackEntryAt(getFragmentManager().getBackStackEntryCount() - 1);
if (frag instanceof XMenuFragment && frag.isVisible()) {
FragmentManager childFm = frag.getChildFragmentManager();
if (childFm.getBackStackEntryCount() > 0) {
// pop the last menu sub-Fragment
childFm.popBackStack();
handled = true
}
}
if(!handled){
super.onBackPressed();
}
}
Run Code Online (Sandbox Code Playgroud)
我使用了不同的代码,因此可能包含错误,但我希望概念的重点是明确的.
| 归档时间: |
|
| 查看次数: |
2137 次 |
| 最近记录: |