用kottlin实现adapter

一,实体类的编写,使用data关键字,就可以自动实现equals()、hashCode()、toString(),get(),set()方法

data class DateBean(
        var name : String ,
        val age :Int ,
        var money : Double,
        var isChecked : Boolean)

二,在Activity中使用. 创建对象不再需要new,

     1,var代表变量,val代表常量

class KottlinActivity2 : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_kotlin2)
        initData()
        initUI()
    }

    val dateBeans = ArrayList<DateBean>()
    private fun initData() {
        for (i in 0..19) {
            val dateBean = DateBean("张三" + i, i, 10000.45,false)
            dateBeans.add(dateBean)
        }
    }

    private fun initUI() {
        val recyclerView = findViewById(R.id.rv) as RecyclerView
        val machinePointAdapter = MachinePointAdapter(dateBeans)
        recyclerView.adapter = machinePointAdapter
        //自己写的接口回调
        machinePointAdapter.setOnItemClickListener(object : MachinePointAdapter.OnClickItemListener {
            override fun onClickItemListener(dataBeans: List<DateBean>, position: Int) {
                Toast.makeText(applicationContext, dataBeans!![position].name, Toast.LENGTH_SHORT).show()
            }
        })
    }
}

三,适配器的实现

class MachinePointAdapter(dateBeans: ArrayList<DateBean>) : RecyclerView.Adapter<MachinePointAdapter.MachineHolder>() {


    private var listener: OnClickItemListener? = null
    val dataBeans = dateBeans;


    override fun onCreateViewHolder(parent: ViewGroup?, viewType: Int): MachineHolder {
        return MachineHolder(LayoutInflater.from(parent!!.context).inflate(R.layout.item_machine, null))
    }

    override fun onBindViewHolder(holder: MachineHolder?, position: Int) {
        val machineHolder = holder as MachinePointAdapter.MachineHolder
        machineHolder?.machine_number?.text = dataBeans[position].age.toString()
        machineHolder?.machine_address?.text = dataBeans[position].name
        machineHolder?.itemView.setOnClickListener { listener?.onClickItemListener(dataBeans,position) }
    }


    override fun getItemCount(): Int {
        return if (dataBeans.size != 0) {
            dataBeans.size
        } else 0
    }


     class MachineHolder(itemMachineView: View) : RecyclerView.ViewHolder(itemMachineView) {
        val machine_number :TextView= itemMachineView.findViewById(R.id.machine_number) as TextView
        val machine_address :TextView= itemMachineView.findViewById(R.id.machine_address) as TextView
    }

    interface OnClickItemListener {
        fun onClickItemListener(dataBeans: List<DateBean>, position: Int)
    }

    fun setOnItemClickListener(listener: OnClickItemListener?) {
        this.listener = listener
    }
}

猜你喜欢

转载自blog.csdn.net/qq_38859786/article/details/82421687
今日推荐