ListView

1. 创建实体类作为ListView适配器的适配类型(Fruit.kt)

name : 水果名字

imageId : 水果图片ID

class Fruit(val name : String, val imageId : Int)
2. 为ListView子项自定义布局(fruit_item.xml)

ImageView : 显示水果图片

TextView : 显示水果名字

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"><ImageViewandroid:id="@+id/fruitImage"android:layout_width="40dp"android:layout_height="40dp"android:layout_gravity="center_vertical"android:layout_marginLeft="10dp" /><TextViewandroid:id="@+id/fruitName"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center_vertical"android:layout_marginLeft="10dp" /></LinearLayout>
3. 自定义适配器(FruitAdapter)

继承ArrayAdapter适配器,选择public ArrayAdapter(@NonNull Context context, int resource, @NonNull List objects)构造方法,通过泛型指定传入数据的类型(Fruit),其中第一个参数传入activity实例,第二个参数传入ListView子项的id,第三个参数传入数据源。

重写getView()方法,此方法在每个item被滚到屏幕内是调用。第一个参数position是item的位置,第二个参数converView是缓存item, 第三个parent是此视图加载到的父视图。

定义内部类ViewHolder, 缓存控件实例,这样就不用每次加载都要去调用findViewById获取控件实例。

class FruitAdapter(activity : Activity, resourceId : Int, data : List<Fruit>) : ArrayAdapter<Fruit>(activity, resourceId, data) {override fun getView(position : Int, converView : View?, parent : ViewGroup) : View {val view : Viewval viewHolder : ViewHolder//判断是否有item缓存if (converView == null) {view = LayoutInflater.from(context).inflate(resourceId, parent, false)val fruitImage = view.fruitImageval fruitName = view.fruitNameviewHolder = ViewHolder(fruitImage, fruitName)view.tag = viewHolder}else {view = convertViewviewHolder = view.tag as ViewHolder}//fruit 实例val fruit = getItem(position)if (fruit != null) {viewHolder.fruitImage.setImageResource(fruit.imageId)viewHolder.fruitName.text = fruit.name}return view}//内部类ViewHolderinner class ViewHolder(val fruitImage : ImageView, val fruitName : TextView)}
4. Activity实现
class MainActivity : AppCompatActivity() {//定义一个数组存放Fruit类型的数据private val fruitList = ArrayList<Fruit>()override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_main)initFruits()//调用FruitAdapter适配器,传入fruitList数据和fruit_item布局val adapter = FruitAdapter(this, R.layout.fruit_item, fruitList)listView.adapter = adapter//添加一个ListView的item点击监听listView.setOnItemClickListener { _, _, position, _ ->val fruit = fruitList[position]Toast.makeText(this, fruit.name, Toast.LENGTH_SHORT).show()}}//初始化数组private fun initFruits() {repeat(10) {fruitList.add(Fruit("apple", R.drawable.apple_pic))fruitList.add(Fruit("banana", R.drawable.banana_pic))fruitList.add(Fruit("cherry", R.drawable.cherry_pic))fruitList.add(Fruit("grape", R.drawable.grape_pic))fruitList.add(Fruit("mango", R.drawable.mango_pic))fruitList.add(Fruit("orange", R.drawable.orange_pic))fruitList.add(Fruit("pear", R.drawable.pear_pic))fruitList.add(Fruit("pineapple", R.drawable.pineapple_pic))fruitList.add(Fruit("strawberry", R.drawable.strawberry_pic))fruitList.add(Fruit("watermelon", R.drawable.watermelon_pic))}}
}

代码地址:https://gitee.com/lunacattus/ListView

Kotlin自定义ListView相关推荐

  1. 自定义listView添加滑动删除功能

    今天研究了一下android里面的手势,结合昨天学习的自定义View,做了一个自定义的listview,继承自listView,添加了条目的滑动手势操作,滑动后出现一个删除按钮,点击删除按钮,触发一个 ...

  2. Android 自定义ListView单击事件失效

    因为自带的listView不能满足项目需求,通过实现自己的Adapter去继承ArrayAdapter 来实现自定义ListView的Item项目. 出现点击ListView的每一项都不会执行setO ...

  3. 【Kotlin】Kotlin 自定义组件 ( 自定义 View | 自定义 SurfaceView )

    文章目录 一.自定义 View 组件 ( Kotlin ) 二.自定义 SurfaceView 组件 ( Kotlin ) 自定义组件构造函数统一在 constructor(context: Cont ...

  4. 自定义ListView【通用】适配器并实现监听控件

    ListView:在Android应用开发过程中属于最常用的系统组件之一,当然可能童鞋们问为什么会突然游戏开发中讲这个,呵呵,其实在游戏开发中,也会常常使用到系统组件,比如游戏排行榜,简单的游戏关卡选 ...

  5. 自定义ListView背景(解决了拖动变黑的效果)

    美化你的android程序:自定义ListView背景 文章分类:移动开发   在Android中,ListView是最常用的一个控件,在做UI设计的时候,很多人希望能够改变一下它的背景,使他能够符合 ...

  6. Android 自定义 ListView 显示网络上 JSON 格式歌曲列表

    本文内容 环境 项目结构 演示自定义 ListView 显示网络上 JSON 歌曲列表 参考资料 本文最开始看的是一个国人翻译的文章,没有源代码可下载,根据文中提供的代码片段,自己新建的项目(比较可恶 ...

  7. 解决listview与scroll冲突,自定义listview高度

    //自定义listview的高度 private void listviewHeight(ListView list){ ListAdapter listadapte = list.getAdapte ...

  8. android中上拉下滑布局,3年以上勿进!最简单的Android自定义ListView下拉刷新与上拉加载,代码直接拿去用~...

    本文主要针对开发新手,手写实现一个最简单Android自定义listview下拉刷新和上拉加载demo. 不喜可喷,欢迎大佬留言指点. 效果图 一:编写需要在ListView中增加头加载的布局文件,与 ...

  9. android 自定义 滑动删除,Android_Android ListView实现仿iPhone实现左滑删除按钮的简单实例,需要自定义ListView。这里就交Fl - phpStudy...

    Android ListView实现仿iPhone实现左滑删除按钮的简单实例 需要自定义ListView.这里就交FloatDelListView吧. 复写onTouchEvent方法.如下: @Ov ...

最新文章

  1. 个人知识体系思维导图_高中数学知识点思维导图
  2. MATLAB 未找到支持的编译器或 SDK。您可以安装免费提供的 MinGW-w64 C/C++ 编译器
  3. Android --- 如何使状态栏和标题栏底色相同
  4. OpenCASCADE:Direct3D CSharp 示例
  5. ibatis查询CHAR类型的字段
  6. 20071025-吉武
  7. 后端码农谈前端(HTML篇)第三课:常见属性
  8. JAVA WEB篇2——Servlet
  9. fiddler使用_fiddler使用教程
  10. linux java ssl_linux系统下安装ssl证书(tomcat)
  11. Python 爬取了 121.3 万条大众点评,告诉你哪里的小龙虾才是一绝!
  12. 海量数据挖掘MMDS week7: 局部敏感哈希LSH(进阶)
  13. 数字孪生智慧监狱三维可视化系统建设方案
  14. 小米mini路由器,刷openwrt,制作usb打印机服务器
  15. Ubuntu更新显卡驱动及安装多版本cuda
  16. html的embed标签的元素隐藏,HTML-embed标签详解
  17. 利用python快速视频格式转换 解决 Premiere 导入TS文件只有声音没有视频
  18. 几十万台 Exchange 服务器已被入侵,修复补丁来了
  19. 创建jira sprint_如何在Excel中创建高级sprint燃尽图
  20. editor.md中markdown编辑器的实现

热门文章

  1. 数学规划模型习题-线性规划
  2. Error Writing E2PROM at AutoInc Address 0x0报错原因
  3. mondrian olap 示例_Mondrian数据库olap应用文档
  4. 如何用Photoshop制作动态分镜
  5. Pharo 4.0:简洁新颖的开源Smalltalk开发环境
  6. 异步编程--Async-awit
  7. 人生之路 — 如何治疗失眠
  8. QT写入文件与读取文件内容
  9. [CS]通信科普相关博文分享
  10. 对乌云网事件的一点点浅薄思考