Android Kotlin入门(RecyclerView的使用)

来源:互联网 发布:淘宝自出版平台 编辑:程序博客网 时间:2024/06/11 23:12

前言

作为Android开发,很有必要了解一下系统新特性,也很有必要了解一下新的开发语言(Kotlin),借着昨天晚上的时间入入门,今天中午记录一下。就不以helloword入门了,我们写一个Recyclerview列表吧。

开干

Android Studio 升级到3.0,自带kotlin功能,新建项目也完全一样,以前创建MainActivity.java 现在创建kotlin文件,创建一个kt文件,继承AppCompatActivity,完成Activity的功能,继承的写法如下:

package teltplay.example.com.kotlindemoimport android.os.Bundleimport android.support.v7.app.AppCompatActivity/** * Created by italkbb on 2017/12/6. */class MainActivity : AppCompatActivity(){    override fun onCreate(savedInstanceState: Bundle?) {        super.onCreate(savedInstanceState)        setContentView(R.layout.activity_main)    }}

这就算一个helloword,不用做什么配置就可以运行了。

下一步导入recyclerview的库吧:

implementation 'com.android.support:recyclerview-v7:26.1.0'

这里我才开始直接是在as里面搜索添加的库,版本和appcompat-v7:26.1.0版本不一样,之前是recyclerview-v7:27.0.2,这样当然会报错:

java.lang.NoSuchMethodError: No static method getFont(Landroid/content/Context;ILandroid/util/TypedValue;ILandroid/widget/TextView;)Landroid/graphics/Typeface; in class Landroid/support/v4/content/res/ResourcesCompat; or its super classes (declaration of 'android.support.v4.content.res.ResourcesCompat' appears in /data/app/teltplay.example.com.kotlindemo-1/base.apk)

更改版本后就好了,具体代码如下:

package teltplay.example.com.kotlindemoimport android.os.Bundleimport android.support.v7.app.AppCompatActivityimport android.support.v7.widget.LinearLayoutManagerimport android.support.v7.widget.RecyclerViewimport android.view.ViewGroupimport android.widget.TextView/** * Created by italkbb on 2017/12/6. */class MainActivity : AppCompatActivity(){    /**     * 我这里才开始是用lateinit关键字的,这个关键字的意思就是延迟赋值,这样使用recyclerview的时候就不用?判空了,     * 当然这样用可能不太好,因为习惯了java的语法,还是private定义个变量吧,     * 当然这个demo完全可以在Oncreate里面 val recyclerview ,成为不可变量,但一直以来view基本都会是类的成员变量     *///    lateinit var mRecyclerView:RecyclerView    private var mRecyclerView:RecyclerView?=null    var mRecyclerViewDatas = listOf(            "第一条数据",            "第二条数据",            "第三条数据",            "第四条数据")    override fun onCreate(savedInstanceState: Bundle?) {        super.onCreate(savedInstanceState)        setContentView(R.layout.activity_main)        mRecyclerView = findViewById<RecyclerView>(R.id.recyclerview) as RecyclerView        mRecyclerView?.layoutManager = LinearLayoutManager(this)        mRecyclerView?.adapter = KotlinAdapter(mRecyclerViewDatas)    }    class KotlinAdapter(val datas : List<String>) : RecyclerView.Adapter<KotlinAdapter.ViewHolder>() {        override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {            return ViewHolder(TextView(parent.context))        }        override fun getItemCount(): Int = datas.size        override fun onBindViewHolder(holder: ViewHolder, position: Int) {            holder.textView.text = datas[position]        }        class ViewHolder(val textView: TextView) : RecyclerView.ViewHolder(textView)    }}

通过查询lateinit关键字,得到:对于非空类型的属性是必须初始化的。如果我们希望延迟进行初始化,就可以使用lateinit关键字了。
lateinit只能在不可null的对象上使用,比须为var,不能为primitives(Int、Float之类),这里用lateinit修饰view其实也行,只是为null的时候可能会exception;当然这段时间不是看了php也就看了js嘛,var啥的还是见过,var修饰可变变量,允许有getter 和 setter,val是不可变变量,它类似于Java中的final,所以如果以val声明就不允许有setter方法。

通过上面的代码一个简单的Recyclerview就轻松展示了,效果图我觉得没必要贴了。不过贴一个也无妨。
这里写图片描述

最后

简单的kotlin使用就这样,语言都差不多,要上手很简单,而且kotlin跟python很像,后期还得继续学习,以便于以后如果要用能够很快上手。

阅读全文
0 0
原创粉丝点击