Kotlin自定义ListView
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相关推荐
- 自定义listView添加滑动删除功能
今天研究了一下android里面的手势,结合昨天学习的自定义View,做了一个自定义的listview,继承自listView,添加了条目的滑动手势操作,滑动后出现一个删除按钮,点击删除按钮,触发一个 ...
- Android 自定义ListView单击事件失效
因为自带的listView不能满足项目需求,通过实现自己的Adapter去继承ArrayAdapter 来实现自定义ListView的Item项目. 出现点击ListView的每一项都不会执行setO ...
- 【Kotlin】Kotlin 自定义组件 ( 自定义 View | 自定义 SurfaceView )
文章目录 一.自定义 View 组件 ( Kotlin ) 二.自定义 SurfaceView 组件 ( Kotlin ) 自定义组件构造函数统一在 constructor(context: Cont ...
- 自定义ListView【通用】适配器并实现监听控件
ListView:在Android应用开发过程中属于最常用的系统组件之一,当然可能童鞋们问为什么会突然游戏开发中讲这个,呵呵,其实在游戏开发中,也会常常使用到系统组件,比如游戏排行榜,简单的游戏关卡选 ...
- 自定义ListView背景(解决了拖动变黑的效果)
美化你的android程序:自定义ListView背景 文章分类:移动开发 在Android中,ListView是最常用的一个控件,在做UI设计的时候,很多人希望能够改变一下它的背景,使他能够符合 ...
- Android 自定义 ListView 显示网络上 JSON 格式歌曲列表
本文内容 环境 项目结构 演示自定义 ListView 显示网络上 JSON 歌曲列表 参考资料 本文最开始看的是一个国人翻译的文章,没有源代码可下载,根据文中提供的代码片段,自己新建的项目(比较可恶 ...
- 解决listview与scroll冲突,自定义listview高度
//自定义listview的高度 private void listviewHeight(ListView list){ ListAdapter listadapte = list.getAdapte ...
- android中上拉下滑布局,3年以上勿进!最简单的Android自定义ListView下拉刷新与上拉加载,代码直接拿去用~...
本文主要针对开发新手,手写实现一个最简单Android自定义listview下拉刷新和上拉加载demo. 不喜可喷,欢迎大佬留言指点. 效果图 一:编写需要在ListView中增加头加载的布局文件,与 ...
- android 自定义 滑动删除,Android_Android ListView实现仿iPhone实现左滑删除按钮的简单实例,需要自定义ListView。这里就交Fl - phpStudy...
Android ListView实现仿iPhone实现左滑删除按钮的简单实例 需要自定义ListView.这里就交FloatDelListView吧. 复写onTouchEvent方法.如下: @Ov ...
最新文章
- 个人知识体系思维导图_高中数学知识点思维导图
- MATLAB 未找到支持的编译器或 SDK。您可以安装免费提供的 MinGW-w64 C/C++ 编译器
- Android --- 如何使状态栏和标题栏底色相同
- OpenCASCADE:Direct3D CSharp 示例
- ibatis查询CHAR类型的字段
- 20071025-吉武
- 后端码农谈前端(HTML篇)第三课:常见属性
- JAVA WEB篇2——Servlet
- fiddler使用_fiddler使用教程
- linux java ssl_linux系统下安装ssl证书(tomcat)
- Python 爬取了 121.3 万条大众点评,告诉你哪里的小龙虾才是一绝!
- 海量数据挖掘MMDS week7: 局部敏感哈希LSH(进阶)
- 数字孪生智慧监狱三维可视化系统建设方案
- 小米mini路由器,刷openwrt,制作usb打印机服务器
- Ubuntu更新显卡驱动及安装多版本cuda
- html的embed标签的元素隐藏,HTML-embed标签详解
- 利用python快速视频格式转换 解决 Premiere 导入TS文件只有声音没有视频
- 几十万台 Exchange 服务器已被入侵,修复补丁来了
- 创建jira sprint_如何在Excel中创建高级sprint燃尽图
- editor.md中markdown编辑器的实现