前一段时间开发比较轻松,所以就研究了一下google
主推的kotlin
语言。我一直坚信,快速学习与掌握一门语言的最好方式就是实践,边开发项目边学习。这样才能快速的将学习的知识运用到实践中,从而发现问题,总结经验。如果你也想学习kotlin
或者也正在学习kotlin
,那么我们不妨可以携手共济,在实践中提升自己,快速掌握kotlin
。
下面我要介绍的项目是完全使用kotlin
编写的一个关于新闻的App
,由于是实践介绍,我这里主要是介绍一下项目中运用到的知识点,方便后续想要一起学习的同学们快速入门与运用。
界面
这是一个关于新闻的App
,我这里主要包括三个界面,分别为新闻主界面、新闻详情界面与新闻订阅界面。下面简要介绍下每个界面运用到的知识点。
主界面
主界面为了展示不同的分类新闻,这里使用了TabLayout
+ViewPager
+Fragment
来实现,因此主要是逻辑就是NewsCategoryFrament
中的接口请求与数据处理。接口请求主要运用的是Retrofit
+RxJava
+RxAndroid
。来看下界面图:
我这里只是简单的介绍项目,如果想要进一步了解
kotlin
的实现可以查看后面的源码地址
详情界面
由于使用的是国外的News Api
所以,对于详情的展示这里使用的是一个WebView
,全部通过原生的WebView
来展示。后续查看源码会发现该处的代码比较简单。
订阅界面
订阅界面主要是对主界面的分类News
进行添加订阅与取消订阅操作。界面结构使用的是两个滑动的RecyclerView
。实现它们间item
的联动。
网络请求
上面主要介绍了界面相关的知识,下面来说下项目中使用的有关网络方面的知识。主要包括接口请求
与图片加载
接口请求封装
前面已经介绍过了,项目使用的是Retrofit
+RxJava
+RxAndroid
来进行接口的请求,为了在项目中进行更好的调用,这里对接口请求进行了封装。主要code
如下:
fun <T> doGet(params: MutableMap<String, Any?>, tClass: Class<T>): Observable<T?> {
return initParams(params, tClass)!!.observeOn(Schedulers.io()).flatMap { tempString ->
if (tClass == NewsArticleListModel::class.java) {
getNewsApi().getArticles(tempString).subscribeOn(Schedulers.io())
} else {
getNewsApi()