简述:
观看视频:https://youtu.be/ANpBWIT3vlU
克隆项目:https://github.com/shredderskelton/androidtemplate。
这是一个非常普遍的问题,我通过创建一种模板项目来解决它,每当我开始一个新的Android项目时使用。其思想是将处理后退按钮、'汉堡包'指示器和片段管理的大部分逻辑抽象成可重用的类:
首先创建一个BaseActivity和BaseFragment类。在这里,您将尽可能地放置可重用的代码。
让我们从您的BaseActivity开始。
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
fragmentManager = getSupportFragmentManager();
fragmentHandler = new AddFragmentHandler(fragmentManager);
fragmentManager.addOnBackStackChangedListener(backStackListener);
}
FragmentManager是掌管后退栈的关键,因此您需要从这里监听后退栈的更改。AddFramentHandler是我设计的一个小类,以便更轻松地从Fragment中添加Fragment。稍后将详细介绍。
@Override
public void onBackPressed() {
if (sendBackPressToDrawer()) {
return;
}
if (sendBackPressToFragmentOnTop()) {
return;
}
super.onBackPressed();
if (fragmentManager.getBackStackEntryCount() == 0) {
finish();
}
}
onBackPressed是大部分魔法发生的地方。你注意到方法的普通文本格式...我是一位热爱Clean Code的粉丝——如果你需要编写注释,说明你的代码不够干净整洁。基本上,你需要有一个中心位置,在那里当你不确定为什么后退按钮按下时没有按照预期的方式工作时可以前去。这个方法就是那个位置。
private void syncDrawerToggleState() {
ActionBarDrawerToggle drawerToggle = getDrawerToggle();
if (getDrawerToggle() == null) {
return;
}
if (fragmentManager.getBackStackEntryCount() > 1) {
drawerToggle.setDrawerIndicatorEnabled(false);
drawerToggle.setToolbarNavigationClickListener(navigationBackPressListener);
} else {
drawerToggle.setDrawerIndicatorEnabled(true);
drawerToggle.setToolbarNavigationClickListener(drawerToggle.getToolbarNavigationClickListener());
}
}
这是BaseActivity的另一个关键部分。基本上,这个方法检查您是否在根片段,并相应地设置指示器。请注意,它根据后台堆栈中有多少个片段来更改侦听器。
然后是BaseFragment:
@Override
public void onResume() {
super.onResume();
getActivity().setTitle(getTitle());
}
protected abstract String getTitle();
上述代码展示了片段如何处理标题。
ActionBarDrawerToggle
了。 - Yoann Hercouet