以下是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格式