Kotlin入坑(二)先写个小项目

来源:互联网 发布:海报设计 知乎 编辑:程序博客网 时间:2024/06/05 18:03

上一篇 Kotlin入坑(一) 中搜集了一些现在网上的kotlin的学习资料,因为感觉kotlin跟java基本的编程思路都是一样的,只是语法上面的不同,于是将上面的资料大体看完就开始着手写个小项目练练手。

小项目地址 https://github.com/chsmy/DouBanKotlin

项目进行的过程中又一次印证了编程世界里,要想写好程序,一定得多敲多练。很多东西看一遍是看懂了,但是真的去写的时候,脑中还是一片空白。遇到问题也是一脸懵逼,还得去查文档。虽然做个简单的小项目也可以起到练习的目的。但是毕竟是小项目,只能涵盖部分的知识点。所以,下面的计划还得将其文档捋一遍,练习一遍。

这篇先记录一下小项目开发中的小知识点

(1)
使用kotlin开发android项目,首先你发现的一个简便的地方就是在也不用写findViewById了。只要我们在xml中给一个控件定义了一个id,就可以在activity或者fragment中直接使用那个id来操作了

比如xml中定义一个RelativeLayout搜索框

<RelativeLayout        android:id="@+id/relative_search"        android:layout_width="match_parent"        android:layout_height="36dp"        android:background="@drawable/search_background"        android:gravity="center_vertical"        android:layout_marginLeft="@dimen/dp_10"        android:layout_marginRight="@dimen/dp_10"        >        <TextView            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_marginStart="10dp"            android:drawablePadding="10dp"            android:drawableStart="@drawable/ic_search"            android:gravity="center"            android:text="@string/search_hint"/>    </RelativeLayout>

那么activity或者fragment中我们就可以直接这么写

 relative_search.setOnClickListener{            val intent = Intent(context, SearchActivity::class.java)            context.startActivity(intent)        }

不用findViewById 直接使用id操作就可以,是不是简洁呢。

不过我们平时写xml的时候,经常会把一些能够复用的布局提出来,然后使用include标签来引入,这个时候如果你使用引入的布局中的id来操作发现无法使用。
其实当我们使用id直接操作的时候。IDE自动帮我们引入了一个包

“import kotlinx.android.synthetic.main.find_fragment.*”

语句中最后的find_fragment就是我们的fragment或者activity所对应的布局。如果我们想找到include标签引入的布局中的id也要把这个布局引入比如

“import kotlinx.android.synthetic.main.search_bar_text.*”

search_bar_text就是我们include引入的布局这样我们又可以愉快的使用id来操作了

(2)
我们平时开发一个andorid工程各种点击事件是经常要写的。比如setOnClickListener,以前我们使用的时候,

 relative_search.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {            }        });

到了kotlin中没有new关键词了,那匿名内部类怎么写呢kotlin中的匿名内部类使用object关键词。

 relative_search.setOnClickListener(object : View.OnClickListener{            override fun onClick(v: View?) {            }        })

kotlin对Lambda表达式支持的很好。可以直接如下写

 relative_search.setOnClickListener{        }

是不是很简单。

上面的监听方法中只有一个参数,如果是多个参数

  mAdapter!!.setOnItemClickListener(object : BaseQuickAdapter.OnItemClickListener{            override fun onItemClick(adapter: BaseQuickAdapter<*, *>?, view: View?, position: Int) {            }        })
mAdapter!!.setOnItemClickListener { adapter, view, position ->            }        }

这样写我们的代码是不是很清晰啊。

上面这两点都是kotlin中的最基础的知识点,所以说在学习一个新的语言的时候,学会练熟它的基础很重要。就比如我们知道这个地方需要写一个匿名内部类,但是这个语言的匿名内部类 怎么写呢我知道,还得去查文档。当遇到另外的问题的时候,还不知道,还得去查文档。虽然差文档或者百度可以解决问题,但是这样做项目的时候断断续续无疑会很影响心情。

(3)
服务器返回的json数据转化成实体类无疑是个很费时并且没啥技术的苦力活,以前都是使用studio插件GsonFormat来自动生成。一开始我是先建一个java工程,然后使用GsonFormat生成实体类,在复制道kotlin的实体类对象中。使用IDE翻译。但是这样翻译过来的并不是最佳的,有很多的冗余。后来一想,kotlin中应该也有插件啊,然后一搜索果然有它就是JsonToKotlinClass,又可以愉快地开发了

原创粉丝点击