写点什么

来聊聊 Android Jetpack

用户头像
Android架构
关注
发布于: 17 小时前

在 Android 架构组件基础上,融入 Kotlin 协程+retrofit,模拟网络,全面快速开发。

Navigation

NavController 在 NavHost 中管理应用导航的对象,沿导航图中的特定路径导航至特定目标,或直接导航至特定目标。


首先,定义 layout/activity_main.xml


<fragment


android:id="@+id/nav_host_fragment"


android:name="androidx.navigation.fragment.NavHostFragment"


android:layout_width="match_parent"


android:layout_height="match_parent"


app:defaultNavHost="true"


app:layout_constraintBottom_toTopOf="@id/nav_view"


app:layout_constraintLeft_toLeftOf="parent"


app:layout_constraintRight_toRightOf="parent"


app:layout_constraintTop_toTopOf="parent"


app:navGraph="@navigation/mobile_navigation" />


《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》
浏览器打开:qq.cn.hn/FTe 免费领取
复制代码


其次,定义 navigation/mobile_navigation.xml


Activity 的添加,需要先在 Project 创建对应的 Activity,即可在布局设计器处理。


<navigation


<fragment


android:id="@+id/navigation_home"


android:name="com.android.myapplication.ui.home.HomeFragment"


android:label="@string/title_home"


tools:layout="@layout/fragment_home">


<action


android:id="@+id/action_navigation_home_to_detail_activity"


app:destination="@id/detail_activity" />


</fragment>


...


<activity


android:id="@+id/detail_activity"


android:name="com.android.myapplication.ui.detail.DetailActivity"


android:label="DetailActivity">


<argument


android:name="detailId"


app:argType="string" />


</activity>


</navigation>


最后,页面跳转,参数传递


val direction = HomeFragmentDirections.actionNavigationHomeToDetailActivity(plantId)


view.findNavController().navigate(direction)


参数接收:


private val args: DetailActivityArgs by navArgs()

Databinding

在 onCreateView()中直接使用控件,会报空指针异常,这个姿势 binding.tvNavigation 是可以的。


val binding = FragmentHomeBinding.inflate(inflater, container, false)


binding.tvNavigation.setOnClickListener {


navigateToDetailPage("1", it)


}


布局文件中,字符串拼接,如跟 ViewModel 一起使用:


android:text='@{"Data From Network-> "+viewModel.response}'

ViewModel

以生命周期的方式存储和管理界面相关的数据。


Kotlin 协程 viewModelScope, 如果 ViewModel 已清除,则在此范围内启动的协程都会自动取消。


private val homeViewModel: HomeViewModel by viewModels {


InjectorUtils.provideHomeViewModelFactory(requireContext())


}


viewModelScope.launch {


...


}

LiveData

一种可观察的数据存储器类,具有生命周期感知能力,意指它遵循其他应用组件(如 Activity、Fragment 或 Service)的生命周期。


var plantName = gardenPlantings.map {


...


}


map 实现 LiveData 的转换

Room

创建应用数据的缓存, SQLite 的基础上提供了一个抽象层,充分利用 SQLite 的强大功能,更强健的数据库访问机制。


使用 Room 引用复杂数据,Room 提供了在基本类型和包装类型之间进行转换的功能,但不允许实体之间进行对象引用。


要为自定义类型添加此类支持,您需要提供一个 TypeConverter,它可以在自定义类与 Room 可以保留的已知类型之间来回转换。


class Converters {//TypeConverters ...}

用户头像

Android架构

关注

还未添加个人签名 2021.10.31 加入

还未添加个人简介

评论

发布
暂无评论
来聊聊 Android Jetpack