AndroidNavigation实战:构建单Activity架构的现代化Android应用
AndroidNavigation实战构建单Activity架构的现代化Android应用【免费下载链接】AndroidNavigationA library managing navigation, nested Fragment, StatusBar, Toolbar for Android项目地址: https://gitcode.com/gh_mirrors/an/AndroidNavigation想要简化Android应用架构告别复杂的Activity管理吗AndroidNavigation库为你提供了终极解决方案这个强大的库专门管理Android应用的导航、嵌套Fragment、状态栏和工具栏让你能够轻松构建单Activity架构的现代化应用。什么是AndroidNavigationAndroidNavigation是一个专为Android开发设计的导航管理库它让你能够将整个应用架构简化为单Activity架构。这意味着你不再需要为每个页面创建单独的Activity而是通过Fragment来管理所有界面大大减少了代码复杂度和内存开销。通过AndroidNavigation你可以实现一行代码完成Fragment嵌套和跳转自动创建和管理Toolbar灵活的状态栏和导航栏配置支持手势返回和懒加载所见即所得的Dialog显示效果为什么选择单Activity架构传统的多Activity架构存在几个痛点内存开销大每个Activity都有自己的窗口和资源状态管理复杂需要在Activity间传递数据转场动画限制Activity间转场动画不够灵活代码重复每个Activity都需要重复配置而单Activity架构通过AndroidNavigation库完美解决了这些问题内存优化只有一个Activity实例统一管理所有Fragment共享同一个Activity上下文灵活转场Fragment间转场更加丰富多样代码复用配置一次到处使用快速开始构建你的第一个单Activity应用1. 添加依赖首先在项目的build.gradle文件中添加依赖dependencies { implementation io.github.listenzz:AndroidNavigation:13.10.1 implementation androidx.appcompat:appcompat:1.6.1 }2. 创建基础Activity你的Activity需要继承AwesomeActivitypublic class MainActivity extends AwesomeActivity { Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (savedInstanceState null) { // 设置根Fragment HomeFragment homeFragment new HomeFragment(); setActivityRootFragment(homeFragment); } } }3. 创建Fragment你的Fragment需要继承AwesomeFragmentpublic class HomeFragment extends AwesomeFragment { Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // 创建你的界面 View view inflater.inflate(R.layout.fragment_home, container, false); return view; } Override public void onViewCreated(NonNull View view, Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); // 设置Toolbar标题 setTitle(首页); } }核心功能详解1. 容器管理三大核心容器AndroidNavigation提供了三个强大的容器类满足不同场景的需求StackFragment - 栈式导航StackFragment以栈的形式管理子Fragment支持push、pop等操作// 创建StackFragment并设置根Fragment StackFragment stackFragment new StackFragment(); stackFragment.setRootFragment(new HomeFragment()); // 在Fragment中跳转到新页面 getStackFragment().pushFragment(new DetailFragment()); // 返回上一页 getStackFragment().popFragment();TabBarFragment - 底部标签栏实现类似微信的底部标签栏布局TabBarFragment tabBarFragment new TabBarFragment(); // 创建各个标签页 HomeFragment homeFragment new HomeFragment(); homeFragment.setTabBarItem(new TabBarItem(首页, R.drawable.icon_home)); ProfileFragment profileFragment new ProfileFragment(); profileFragment.setTabBarItem(new TabBarItem(我的, R.drawable.icon_profile)); // 设置标签页 tabBarFragment.setFragments(homeFragment, profileFragment);DrawerFragment - 侧滑菜单实现Material Design风格的侧滑菜单DrawerFragment drawerFragment new DrawerFragment(); drawerFragment.setContentFragment(new MainContentFragment()); drawerFragment.setMenuFragment(new SideMenuFragment());2. 智能Toolbar管理AndroidNavigation自动为你创建和管理Toolbar无需手动配置Override public void onViewCreated(NonNull View view, Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); // 设置标题 setTitle(商品详情); // 添加右侧按钮 setRightBarButtonItem(new ToolbarButtonItem(分享, v - shareProduct())); // 自定义返回按钮行为 setLeftBarButtonItem(new ToolbarButtonItem(关闭, v - dismissFragment())); }3. 状态栏和导航栏配置轻松定制状态栏样式Override protected void onCustomStyle(NonNull Style style) { super.onCustomStyle(style); // 透明状态栏 style.setStatusBarColor(Color.TRANSPARENT); style.setToolbarBackgroundColor(Color.TRANSPARENT); // 白色文字 style.setStatusBarStyle(BarStyle.LightContent); style.setToolbarTintColor(Color.WHITE); // 启用手势返回 style.setSwipeBackEnabled(true); }4. 灵活的页面跳转AndroidNavigation支持多种跳转方式// 1. 普通跳转push getStackFragment().pushFragment(new DetailFragment()); // 2. 模态对话框present presentFragment(new LoginFragment(), REQUEST_CODE); // 3. 带返回结果的跳转 Override public void onFragmentResult(int requestCode, int resultCode, Bundle data) { if (requestCode REQUEST_CODE resultCode RESULT_OK) { String result data.getString(result); // 处理返回结果 } } // 4. 重定向替换当前页面 getStackFragment().redirectToFragment(new NewFragment());实际应用场景场景1电商应用架构public class ECommerceActivity extends AwesomeActivity { Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 主架构TabBar StackFragment TabBarFragment tabBarFragment new TabBarFragment(); // 首页标签 StackFragment homeStack new StackFragment(); homeStack.setRootFragment(new HomeFragment()); homeStack.setTabBarItem(new TabBarItem(首页, R.drawable.home)); // 分类标签 StackFragment categoryStack new StackFragment(); categoryStack.setRootFragment(new CategoryFragment()); categoryStack.setTabBarItem(new TabBarItem(分类, R.drawable.category)); // 购物车标签 StackFragment cartStack new StackFragment(); cartStack.setRootFragment(new CartFragment()); cartStack.setTabBarItem(new TabBarItem(购物车, R.drawable.cart)); // 我的标签 StackFragment profileStack new StackFragment(); profileStack.setRootFragment(new ProfileFragment()); profileStack.setTabBarItem(new TabBarItem(我的, R.drawable.profile)); tabBarFragment.setFragments(homeStack, categoryStack, cartStack, profileStack); setActivityRootFragment(tabBarFragment); } }场景2社交应用聊天界面public class ChatFragment extends AwesomeFragment { Override public void onViewCreated(NonNull View view, Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); // 设置聊天页面标题 setTitle(张三); // 添加右侧菜单按钮 setRightBarButtonItem(new ToolbarButtonItem(更多, v - showChatOptions())); // 监听返回键 setBackPressedListener(() - { // 保存草稿 saveDraft(); return false; // 允许返回 }); } // 跳转到用户详情 private void goToUserProfile() { UserProfileFragment profileFragment new UserProfileFragment(); getStackFragment().pushFragment(profileFragment); } }高级特性1. 懒加载优化AndroidNavigation 5.0.0 支持使用onResume和onPause实现懒加载public class LazyFragment extends AwesomeFragment { private boolean isDataLoaded false; Override public void onResume() { super.onResume(); if (!isDataLoaded) { loadData(); isDataLoaded true; } } private void loadData() { // 加载数据只在第一次显示时执行 } }2. 自定义转场动画// 设置自定义转场动画 Override protected TransitionAnimation onCreateTransitionAnimation(boolean enter, int transit) { if (enter) { // 进入动画 return TransitionAnimation.fromRight(); } else { // 退出动画 return TransitionAnimation.toLeft(); } } // 共享元素转场 public void openWithSharedElement(View sharedElement, String transitionName) { DetailsFragment details new DetailsFragment(); Bundle args FragmentHelper.getArguments(details); args.putString(transitionName, transitionName); getStackFragment().pushFragment(details, () - { // 设置共享元素 FragmentTransaction ft getParentFragmentManager().beginTransaction(); ft.addSharedElement(sharedElement, transitionName); return ft; }); }3. 全局样式配置在AwesomeActivity中统一配置应用样式public class MyAppActivity extends AwesomeActivity { Override protected void onCustomStyle(Style style) { super.onCustomStyle(style); // 全局样式配置 style.setScreenBackgroundColor(Color.WHITE); style.setStatusBarStyle(BarStyle.DarkContent); style.setStatusBarColor(Color.parseColor(#FFFFFF)); style.setToolbarBackgroundColor(Color.parseColor(#6200EE)); style.setToolbarTintColor(Color.WHITE); style.setTitleTextColor(Color.WHITE); style.setSwipeBackEnabled(true); style.setElevation(8); } }最佳实践1. 项目结构建议app/ ├── src/main/java/com/yourapp/ │ ├── activity/ │ │ └── MainActivity.java │ ├── fragment/ │ │ ├── home/ │ │ │ ├── HomeFragment.java │ │ │ └── HomeViewModel.java │ │ ├── detail/ │ │ │ ├── DetailFragment.java │ │ │ └── DetailViewModel.java │ │ └── ... │ └── navigation/ │ ├── Navigator.java │ └── Route.java2. 导航工具类封装public class Navigator { public static void pushFragment(AwesomeFragment from, AwesomeFragment to) { StackFragment stackFragment from.getStackFragment(); if (stackFragment ! null) { stackFragment.pushFragment(to); } } public static void presentFragment(AwesomeFragment from, AwesomeFragment to, int requestCode) { from.presentFragment(to, requestCode); } public static void popToRoot(AwesomeFragment fragment) { StackFragment stackFragment fragment.getStackFragment(); if (stackFragment ! null) { stackFragment.popToRootFragment(); } } }3. 状态管理建议public class BaseFragment extends AwesomeFragment { protected void showLoading() { // 显示加载状态 } protected void hideLoading() { // 隐藏加载状态 } protected void showError(String message) { // 显示错误提示 } Override protected boolean isBackInteractive() { // 防止快速点击返回键 return !isProcessing(); } }性能优化技巧Fragment复用合理使用setRetainInstance(true)保存状态图片优化使用Glide等图片库避免内存泄漏数据懒加载只在Fragment可见时加载数据内存监控使用LeakCanary检测内存泄漏布局优化使用ConstraintLayout减少布局层级常见问题解决Q1: Fragment重叠问题解决方案确保在savedInstanceState null时才添加初始FragmentQ2: 状态栏样式不一致解决方案在onCustomStyle中统一配置或在特定Fragment中重写preferredStatusBarStyleQ3: 返回键处理解决方案重写onBackPressed方法返回true表示消费事件Q4: 手势返回冲突解决方案在需要禁用手势返回的Fragment中重写isSwipeBackEnabled返回false总结AndroidNavigation为Android开发者提供了一个强大而灵活的单Activity架构解决方案。通过这个库你可以✅简化应用架构告别复杂的Activity管理 ✅提升开发效率一行代码完成导航和UI配置 ✅优化用户体验流畅的转场动画和手势操作 ✅降低内存占用单Activity架构减少资源消耗 ✅统一代码风格一致的API和配置方式无论你是开发电商应用、社交应用还是工具类应用AndroidNavigation都能帮助你构建现代化、高性能的Android应用。开始使用AndroidNavigation体验单Activity架构带来的开发乐趣吧立即开始在你的项目中添加AndroidNavigation依赖按照本文的指南构建你的第一个单Activity应用。如果有任何问题可以参考demo源码中的完整示例。记住好的架构是成功应用的基础。选择AndroidNavigation选择更优雅的Android开发方式✨【免费下载链接】AndroidNavigationA library managing navigation, nested Fragment, StatusBar, Toolbar for Android项目地址: https://gitcode.com/gh_mirrors/an/AndroidNavigation创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考