Kotlin中ListView与RecyclerView的应用讲解
作者:zhaochengfang 发布时间:2023-01-24 01:26:44
标签:Kotlin,ListView,RecyclerView
写下来自己以后看:
先是item的布局文件:
里边放了一个图片和一个文本框
<?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"
android:id="@+id/linearLayout"
>
<ImageView
android:id="@+id/imageView"
android:layout_width="40dp"
android:layout_height="40dp"
android:layout_gravity="center_vertical"
/>
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
/>
</LinearLayout>
ListView:
布局文件:
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".ListViewActivity">
<ListView
android:id="@+id/listView"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
适配器:
class FruitAdapter(private val context: Context, private val list : List<Fruit>) : BaseAdapter() {
override fun getCount(): Int = list.size
override fun getItem(position: Int): Any = list[position]
override fun getItemId(position: Int): Long = position.toLong()
override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View? {
var convertView = convertView
var holder : ViewHolder? = null
if (convertView == null){
holder = ViewHolder()
convertView = View.inflate(context,R.layout.item_list_view,null)
holder.textView = convertView.findViewById<View>(R.id.textView) as TextView
holder.imageView = convertView.findViewById<View>(R.id.imageView) as ImageView
holder.linearLayout = convertView.findViewById<View>(R.id.linearLayout) as LinearLayout
convertView.tag = holder
}else{
holder = convertView.tag as ViewHolder
}
holder.textView!!.text = list[position].name
holder.imageView!!.setImageResource(list[position].image)
holder.linearLayout!!.setOnClickListener {
Toast.makeText(context,list[position].name,Toast.LENGTH_SHORT).show()
}
return convertView
}
internal class ViewHolder{
var textView : TextView? = null
var imageView : ImageView? = null
var linearLayout : LinearLayout? = null
}
}
剩下的就是逻辑处理:
class ListViewActivity : AppCompatActivity() {
private val bean = ArrayList<Fruit>()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_list_view)
for (i in 1..100){
bean.add(Fruit(i.toString(),R.drawable.ic_launcher_foreground))
}
val adapter = FruitAdapter(this,bean)
listView.adapter = adapter
}
}
RecyclerView:
布局文件:
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".RecyclerViewActivity">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</androidx.constraintlayout.widget.ConstraintLayout>
适配器:
class FruitRecyclerViewAdapter(private val context: Context,private val list: List<Fruit>) : RecyclerView.Adapter<FruitRecyclerViewAdapter.ViewHolder>() {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
val view : View = LayoutInflater.from(context).inflate(R.layout.item_list_view,null)
return ViewHolder(view)
}
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
holder.itemView.textView.text = list[position].name
holder.itemView.imageView.setImageResource(list[position].image)
holder.itemView.linearLayout.setOnClickListener {
Toast.makeText(context,list[position].name,Toast.LENGTH_SHORT).show()
}
}
override fun getItemCount(): Int = list.size
class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
private val textView : TextView = itemView.findViewById(R.id.textView)
private val imageView : ImageView = itemView.findViewById(R.id.imageView)
private val linearLayout : LinearLayout = itemView.findViewById(R.id.linearLayout)
}
}
逻辑代码:
class RecyclerViewActivity : AppCompatActivity() {
private val bean = ArrayList<Fruit>()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_recycler_view)
repeat(3){
for (i in 1..15){
bean.add(Fruit(i.toString(),R.drawable.ic_launcher_foreground))
}
}
val layoutManger = LinearLayoutManager(this)
//layoutManger.orientation = LinearLayoutManager.HORIZONTAL
recyclerView.layoutManager = layoutManger
val adapter = FruitRecyclerViewAdapter(this,bean)
recyclerView.adapter = adapter
}
}
这里的repeat函数是重复三次,意思就是会有三个1到15,也就是此recyclerView会有45个item.
现在的是纵向滑动的,如果要改成横向的,就把我代码中的注释掉的
//layoutManger.orientation = LinearLayoutManager.HORIZONTAL
取消注释就可以实现横向滑动了,如果不嫌弃难看,布局文件就不用改。
最后是实体类:
class Fruit(val name : String,val image : Int) {
}
定义了一个name用来显示名字,定义了一个image,用来显示图片。
来源:https://blog.csdn.net/zhaochengfang/article/details/120228055


猜你喜欢
- WPF换肤的设计原理,利用资源字典为每种皮肤资源添加不同的样式,在后台切换皮肤资源文件。截图上图中,第一张图采用规则样式,第二张图采用不规则
- 一、使用Json.NetJson.Net是支持序列化和反序列化DataTable、DataSet、Entity Framework和Enti
- 一、前期准备1、申请好微信商户号appid,拿到商户id和商户秘钥,退款的话需要商户证书2、申请好支付宝商户号appid,商户公钥和秘钥(需
- 动态数据源在很多具体应用场景的时候,我们需要用到动态数据源的情况,比如多租户的场景,系统登录时需要根据用户信息切换到用户对应的数据库。又比如
- 1.说明如果你也在用Mybatis,建议尝试该分页插件,这个一定是最方便使用的分页插件。该插件目前支持Oracle,Mysql,MariaD
- 思路首先编写程序时,或多或少会存在几个固定的Filter,那么第一步就是为确定的那几个Filter指定好顺序。(通常情况下的使用场景是:你要
- 本文实例讲述了winform基于异步委托实现多线程摇奖器。分享给大家供大家参考。具体实现方法如下:using System;using Sy
- 前提之前很长一段时间关注JDK协程库的开发进度,但是前一段时间比较忙很少去查看OpenJDK官网的内容。Java协程项目Loom(因为项目还
- 这篇文章主要介绍了spring web.xml指定配置文件过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价
- 最近公司在新版本上有一个需要,要在首页添加一个滑动效果,具体就是仿照X宝的商品详情页,拉到页面底部时有一个粘滞效果,如下图X东的商品详情页,
- 直接上代码public static class ImageCompress { /// <su
- Java 项目中常常回遇到发送邮件Java 发送邮件有几种,今天先给大家介绍用 HtmlEmail 来发送邮件,我这里是用 Maven 来搭
- 一.线程池简介线程池的概念线程池就是首先创建一些线程,它们的集合称为线程池,使用线程池可以很好的提高性能,线程池在系统启动时既创建大量空闲的
- Java InputStream的任意拷贝有时候,当我们需要多次使用到同一个InputStream的时候如何实现InputStream的拷贝
- 今天群里有人问了关于仿京东App分类页面的实现,而我之前正好查过这方面的资料,手上正好有一个demo,正好分享给大家看看,个人觉得效果棒棒哒
- 本文实例为大家分享了java实现订餐系统的具体代码,供大家参考,具体内容如下import java.util.Scanner;public
- 最近在做毕业设计,想有一个功能和QQ一样可以裁剪头像并设置圆形头像,额,这是设计狮的一种潮流。而纵观现在主流的APP,只要有用户系统这个功能
- 假定你已经了解了运行时的数据区域和常用的垃圾回收算法,也了解了Hotspot支持的垃圾回收器。一、cpu占用过高cpu占用过高要分情况讨论,
- 想要在Ubuntu上运行java程序,可以将java程序编译成功后打包,然后在Ubuntu上用命令执行jar文件具体操作如下:1、Windo
- 1 配置文件的方法我们编写spring 框架的代码时候。一直遵循是这样一个规则:所有在spring中注入的bean 都建议定义成私有的域变量