1. 先上效果图
2. 配置
配置就省了,网上有很多配置的博客,我也有一篇专门讲as如何配置的博客Kotlin初体验
3.代码部分
Main2Activity.kt
package com.example.kotlin
import android.os.Bundle
import android.support.v7.app.AppCompatActivity
import android.support.v7.widget.LinearLayoutManager
import android.view.View
import android.widget.Toast
import kotlinx.android.synthetic.main.activity_main2.*
class Main2Activity : AppCompatActivity(), OnItemClick {
private var data = ArrayList<String>()
private var adapter: MyAdapter? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main2)
adapter = MyAdapter()
adapter!!.add(getData())
val manager = LinearLayoutManager(application)
recyclerView.layoutManager = manager
recyclerView.adapter = adapter
adapter!!.setItemClick(this)
}
fun getData(): List<String> {
for (i in 1..100) {
data!!.add("我是标题" + i)
}
return data
}
override fun onItemClick(view: View, postion: Int) {
Toast.makeText(applicationContext, "我是第" + postion + "个", Toast.LENGTH_SHORT).show()
}
}
MyHolder.kt
package com.example.kotlin
import android.support.v7.widget.RecyclerView
import android.util.SparseArray
import android.view.View
import android.widget.TextView
/**
* 作者:Tangren on 2017/5/22 12:46
* 邮箱:wu_tangren@163.com
* TODO:一句话描述
*/
class MyHolder(itemView: View, click: OnItemClick) : RecyclerView.ViewHolder(itemView), View.OnClickListener {
var textView: TextView
private var click: OnItemClick? = null
init {
textView = itemView.findViewOften(R.id.textView)
this.click = click
itemView.setOnClickListener(this)
}
fun <T : View> View.findViewOften(viewId: Int): T {
var viewHolder: SparseArray<View> = tag as? SparseArray<View> ?: SparseArray()
tag = viewHolder
var childView: View? = viewHolder.get(viewId)
if (null == childView) {
childView = findViewById(viewId)
viewHolder.put(viewId, childView)
}
return childView as T
}
override fun onClick(v: View?) {
if (v != null) {
click!!.onItemClick(v, adapterPosition)
}
}
}
MyAdapter.kt
package com.example.kotlin
import android.support.v7.widget.RecyclerView
import android.view.LayoutInflater
import android.view.ViewGroup
/**
* 作者:Tangren on 2017/5/22 12:45
* 邮箱:wu_tangren@163.com
* TODO:一句话描述
*/
class MyAdapter : RecyclerView.Adapter<MyHolder>() {
var list: List<String> = ArrayList<String>()
var click: OnItemClick? = null
fun add(list: List<String>) {
this.list = list
}
override fun onBindViewHolder(holder: MyHolder?, position: Int) {
holder!!.textView.setText(list!!.get(position))
}
override fun getItemCount(): Int {
return list!!.size
}
override fun onCreateViewHolder(parent: ViewGroup?, viewType: Int): MyHolder {
val view = LayoutInflater.from(parent!!.getContext()).inflate(R.layout.item_holder_view, parent, false)
val holder = MyHolder(view, click!!)
return holder
}
fun setItemClick(click: OnItemClick) {
this.click = click
}
}
OnItemClick.kt
package com.example.kotlin
import android.view.View
/**
* 作者:Tangren on 2017/5/22 15:08
* 邮箱:wu_tangren@163.com
* TODO:一句话描述
*/
interface OnItemClick {
fun onItemClick(view: View, postion: Int)
}
3.总结
Demo相对简单,但是主要是体会精神,简洁的无可挑剔!
项目下载地址