Kotlin简单实现ListView

在这里插入图片描述

以下是Kotlin对ListView的简单实现

主类代码:

package com.example.olderjiao

import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.text.style.ClickableSpan
import android.view.View
import android.widget.AdapterView
import android.widget.ArrayAdapter
import android.widget.Toast
import kotlinx.android.synthetic.main.activity_main.*
import java.net.URL

import kotlin.collections.ArrayList


class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        //编写ListView数据源
        val datas:ArrayList<String> = ArrayList()
        //for循环  step步长值
        for(i in 1..100 step 1){
            datas.add(""+i)
        }
        var adapter : MyAdapter = MyAdapter(this,datas)
        lv.adapter = adapter
        //ListView点击监听
        lv.setOnItemClickListener { parent, view, position, id ->
            Toast.makeText(this,datas[position],Toast.LENGTH_LONG).show()
        }
}

适配器代码

package com.example.olderjiao

import android.content.Context
import android.content.IntentFilter
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.BaseAdapter
import android.widget.TextView
import java.security.AccessControlContext

class MyAdapter(var context:Context,var datas :ArrayList<String>) : BaseAdapter() {
    override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View? {
        var myHolder: MyHolder ?= null
        var view : View? = null
        if(convertView == null){
            myHolder = MyHolder()
            view = LayoutInflater.from(context).inflate(R.layout.item_me,null)
            myHolder.tv = view.findViewById(R.id.itemtv)
            view.tag = myHolder
        }else{
            view = convertView
            //获取tag强转
            myHolder = view.tag as MyHolder
        }

        myHolder.tv.text = datas[position]

        return view!!

    }

    override fun getItem(position: Int): Any {
        return datas[position]
    }

    override fun getItemId(position: Int): Long {
        return position.toLong()
    }

    override fun getCount(): Int {
        return datas.size
    }

    inner class MyHolder{
        lateinit var tv : TextView
    }

}
class MyAdapter(var context:Context,var datas :ArrayList<String>) : BaseAdapter() {}//这一行相当于java中的构造方法

如果从网络上获取数据,则必须开启子线程去访问

网络访问代码:

val str : String = "http://www.qubaobei.com/ios/cf/dish_list.php?stage_id=1&limit=20&page=1"
        Thread{
            var request = URL(str).readText()
            println(request)
        }.start()

此方法是内部类的写法,Kotlin的网络访问是最方便最简洁的,他将java网络访问的过程包括读数据和写数据都在底层封装完成,只要接受json的串就可以,该方法可以接收两种格式,一种是字符串,另外一种是byte格式

效果图

在这里插入图片描述

点击后:

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_44946212/article/details/90948197
今日推荐