1、项目目的:
在接触Android Jetpack组件时, 就深深被其巧妙的设计和强大的功能所吸引,暗自告诉自己一定要学会这些组件,而网上并不能找到系统的学习资料,于是利用每天的时间访问Google Developers,把Jetpack的每个组件从使用到源码进行了系统的学习和总结,于是就有了带你领略Android Jetpack组件的魅力系列文章,希望在总结自己学习的同时,也能帮助需要这些资料的同学,在写完这些文章后,想在项目中使用这些强大组件的想法就更加想强烈了, 但又担心直接在公司项目中使用会又踩坑的危险,而且公司的项目又一时难以全部替换,好在WanAndroid提供了完整的应用接口,才有了这个Jetpack版的WanAndroid客户端,项目功能比较简单,作为Jetpack组件的实战项目,旨在抛砖引玉和大家一起真正的使用Jetpack组件。
2、项目简介:
- 项目架构
既然本篇是对Android Jetpack组件的实战,那么就按照官方推荐的项目架构进行开发,架构内容见下图:
上面架构大家应是很熟悉的,基本原则和平时使用的MVC、MVP等一样,都是使界面、数据、和处理的逻辑进行解耦,打造稳定的、易测试、易扩展的项目架构,只是在这个过程中使用了全新的组件,如:ViewModel、LiveData等,使整个项目架构更加简单和灵活,关于使用的新组件不了解的可以点击文章开头的链接,学习相关组件的使用,本文默认读者已经了解组件的简单使用。
- 项目内容:
- 项目结构
本项目按照前面项目架构的指导,根据各个模块的功能进行分包管理,如下图:
3、项目实战
3.1、登陆模块
登陆模块遵循着一个Activit多Fragment的实现,提供注册(RegisterFragment)和登陆(LoginFragment)功能,相信这样的实现和写法对所有开发者来说都是So easy,甚至心里已将想好了如何像Activity添加Fragment,如何实现两个Fragment间的交互,我想说兄弟先停下脑子中的代码,来看看下面Loginactivity中的实现:
class LoginActivity : BaseCompatActivity() {
override fun onErrorViewClick(v: View?) {}
override fun initView(savedInstanceState: Bundle?) {}
override fun getLayoutId() = R.layout.activity_login
override fun onSupportNavigateUp() = Navigation.findNavController(this, R.id.fragment_navigation_login).navigateUp()}
onErrorViewClick()、initView()、getLayoutId()是在BaseCompatActivity中的抽象方法,用于加载布局和初始化控件,忽略这些方法后,真正实现像Activity中添加Fragment和Fragment的导航的代码就只有一行。。。,之所以这么简单完全得力于Navigation的使用,我们只需按规定的设置Navigation的xml文件,并将其加载到布局中,其他的操作都在Navigation中自动完成,下面看一下navigation.xml文件:
<?xml version="1.0" encoding="utf-8"?>
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/login_navigation"
app:startDestination="@id/loginFragment">
<fragment
android:id="@+id/loginFragment"
android:name="com.example.administrator.wanandroid.ui.fragment.LoginFragment"
android:label="LoginFragment" >
<action
android:id="@+id/action_loginFragment_to_registerFragment"
app:destination="@id/registerFragment" />
</fragment>
<fragment
android:id="@+id/registerFragment"
android:name="com.example.administrator.wanandroid.ui.fragment.RegisterFragment"