ListView

ListView

1.创建一个类作为ListView适配器的适配类型

class Fruit(val name:String,val imageId:Int)

成员变量包括名字和图片id

2.编写一个继承ArrayAdapter的适配器:

class FruitAdapter(activity: Activity,val resourceId:Int,data:List<Fruit>):ArrayAdapter<Fruit>(activity,resourceId,data) {
    override fun getView(position: Int, convertView: View?, parent: ViewGroup): View {
        val view = LayoutInflater.from(context).inflate(resourceId,parent,false)//为view加载布局
        val image:ImageView = view.findViewById(R.id.image)
        val name:TextView = view.findViewById(R.id.text)//获取布局中的两个控件
        val fruit = getItem(position)//获取当前项fruit实例
        if(fruit != null){
            image.setImageResource(fruit.imageId)
            name.text = fruit.name//调用实例中的数据设置控件
        }
        return view//返回子布局
    }
}

ArrayAdapter的三个参数为上下文,布局文件,数据

重写getView方法返回子布局

inflate的三个参数:布局文件,上下文,false为标准写法

获取到imageview和textview控件

getItem获取list(data)当前项的fruit实例,然后设置图片和文字

3.修改main

class MainActivity : AppCompatActivity() {
    private val list = ArrayList<Fruit>()
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        initFruits()
        val adapter = FruitAdapter(this,R.layout.fruit,list)
        listview.adapter = adapter
    }
    private fun initFruits(){
        repeat(2){
            list.add(Fruit("yxy",R.drawable.yxy))
            list.add(Fruit("zcy",R.drawable.zcy))
        }
    }
}

新建一个Fruit类型的list,获取 FruitAdapter适配器,initfruits向list中添加数据,然后设置list的适配器为 FruitAdapter

4.总结流程

要在listview中添加Fruit类型的list --------------> 定义Fruit类 Fruit(val name:String,val imageId:Int)

向list中添加数据 -----------------> list.add(Fruit("zcy",R.drawable.zcy)) 名字和图片资源

为我们自定义的Fruit类型创建适配器---------------------->FruitAdapter

FruitAdapter:作用是适配我们的布局,所以重写getView,返回子布局

原文地址:https://www.cnblogs.com/hzoi-poozhai/p/12713696.html