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,用来显示图片。

到此这篇关于Kotlin中ListView与RecyclerView的应用讲解的文章就介绍到这了,更多相关Kotlin中ListView与RecyclerView内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Kotlin 和 Java 混合开发入门教程

    目录 一.前沿 二.学习 Kotlin 前准备 三.Kotlin 语法简介 优秀的表达式 加强版 switch 模板字符串 空指针异常不存在了 编写单例类 扩展方法 运算符重载 四.Kotlin 与 Java 混合开发 五.Kotlin 与 Java 总结 一.前沿 如果你学习过其他的编程语言,你就会发现 Java 的语法很是哆嗦,可是我们为什么没有放弃 Java 这门编程语言呢?因为 JVM 是一个非常好的平台,而且 Java 程序员目前在中国所占的比重实在是太高了.这是历史包袱导致的.暂且不

  • Android Kotlin使用SQLite案例详解

    Kotlin使用SQLite 首先确定我们的目标,SQLite只是一种工具,我们需要掌握就是增删改查就可以,我们真正需要动脑的还是项目中的业务逻辑.我这篇文章写得比较适合新手,没用过SQLite的同学. 前期准备工作 新建一个类MyDataBaseHelper继承自SQLiteOpenHelper,代码如下: class MyDatabaseHelper(var context: Context, name: String, version: Int) : SQLiteOpenHelper(co

  • Kotlin封装RecyclerView Adapter实例教程

    前言 Kotlin越来越流行,在Google的推动下发展的很迅猛,现在的项目大多使用上了Kotlin,其简练的语法糖确实能减少不少代码. Adapter的封装GitHub上有很多了,但大多数封装的太好了,是的,使用太简单了,使用简单.封装力度大就导致灵活性和代码复杂性上升,谁用谁知道,当然也有封装简单的. 这里我借助Kotlin的简单语法再次操刀封装了一下. 先看下使用 单类型的使用 val adapter=recyclerView.setUp(users, R.layout.item_layo

  • 使用kotlin编写spring cloud微服务的过程

    创建工程 使用idea的spring initializr创建一个项目,语言选择kotlin, 类型为gradle. 根据需要选择依赖 配置文件 yml或者properties文件和java是完全一样的,这里不详细说明 修改build.gradle.kts中的参数: plugins { //spring boot版本 id("org.springframework.boot") version "2.3.3.RELEASE" //自动依赖包版本管理 id("

  • 详解分别用Kotlin和java写RecyclerView的示例

    本文介绍了分别用Kotlin和java写RecyclerView的示例,分享给大家,具体如下: java:跟一般的写法一样,增加了按钮响应 MainActivity: public class MainActivity extends AppCompatActivity implements RecyclerAdapter.OnItemClickListener{ private RecyclerView mRecyclerView; private RecyclerView.LayoutMan

  • 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_heigh

  • Kotlin中的高阶函数深入讲解

    前言 在Kotlin中,高阶函数是指将一个函数作为另一个函数的参数或者返回值.如果用f(x).g(x)用来表示两个函数,那么高阶函数可以表示为f(g(x)).Kotlin为开发者提供了丰富的高阶函数,比如Standard.kt中的let.with.apply等,_Collectioins.kt中的forEach等.为了能够自如的使用这些高阶函数,我们有必要去了解这些高阶函数的使用方法. 函数类型 在介绍常见高阶函数的使用之前,有必要先了解函数类型,这对我们理解高阶函数很有帮助.Kotlin 使用

  • Kotlin中Lambda表达式与高阶函数使用分析讲解

    目录 Lambda表达式 高阶函数 小结 编程语言的发展,通过需求,不断的变化出新的特性,而这些特性就会使得编程变得更加的简洁. Lambda表达式 Lambda表达式的出现,一定程度上使得函数和变量慢慢的融为一体,这样做的好处大大的方便了回调函数的使用. 在很多的情况下,其实我们的函数就只有简单的几行代码,用fun就感觉有点重了,而且有的时候这么大的函数结构用起来,并不是非常的方便. Lambda表达式,其表达式为: {变量定义 -> 代码块} 其中: lambda 函数是一个可以接收任意多个

  • Kotlin中的反射机制深入讲解

    前言 Java中的反射机制,使得我们可以在运行期获取Java类的字节码文件中的构造函数,成员变量,成员函数等信息.这一特性使得反射机制被常常用在框架中,想要比较系统的了解Kotlin中的反射,先从Java的反射说起. Java中的反射 通常我们写好的.java源码文件,经过javac的编译,最终生成了.class字节码文件.这些字节码文件是与平台无关的,使用时通过Classloader去加载这些.class字节码文件,从而让程序按照我们编写好的业务逻辑运行.Java的反射主要是从这些.class

  • 对比Java讲解Kotlin中?.与!!.的区别

    前言 本文主要介绍了关于Kotlin中?.与!!.的区别,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧 1.?. //kotlin: a?.foo() //相当于java: if(a!=null){ a.foo(); } 2.!!. //kotlin: a!!.foo() //相当于java: if(a!=null){ a.foo(); }else{ throw new KotlinNullPointException(); } 时间宝贵的同学可以不要看下面的了(` _ `)

  • 一文讲解Kotlin中的contract到底有什么用

    目录 前言 测试 查看 contract 函数 returns callsInPlace 总结 前言 我们在开发中肯定会经常用Kotlin提供的一些通用拓展函数,当我们进去看源码的时候会发现许多函数里面有contract {}包裹的代码块,那么这些代码块到底有什么作用呢?? 测试 接下来用以下两个我们常用的拓展函数作为例子 public inline fun <T, R> T.run(block: T.() -> R): R { contract { callsInPlace(block

  • 将替代ListView的RecyclerView 的使用详解(一)

    RecyclerView 是 android-support-v7-21 版本中新增的一个 Widgets, 还有一个 CardView 会在下次介绍使用.官方介绍 RecyclerView 是 ListView 的升级版本,更加先进和灵活.我们写一个简单的实例例,来看一下究竟有多先进和灵活. build.gradle 配置 android { compileSdkVersion 'android-L' buildToolsVersion "20.0.0" defaultConfig

  • Android添加图片到ListView或者RecyclerView显示

    先上图 点击+号就去选择图片 实际上这个添加本身就是一个ListView或者 RecyclerView 只是布局有些特殊 item <?xml version="1.0" encoding="utf-8"?> <liu.myrecyleviewchoosephoto.view.SquareRelativeLayout xmlns:android="http://schemas.android.com/apk/res/android&quo

  • 详解Kotlin 中使用和配置 Dagger2

    前言 陆陆续续几篇文章已经讲解了项目中 Kotlin 如何配置.简单语法.DataBinding 配置,接下来就要说到 Kotlin 中的 Dagger2 了. 配置 Dagger2 项目中使用 Dagger2 ,首先还是添加依赖.同样的,因为要使用到注解处理,所以和 DataBinding 一样要添加 kapt 插件: apply plugin: 'com.android.application' ... apply plugin: 'kotlin-kapt' // kapt 插件 ... k

  • Kotlin中let()with()run()apply()also()函数的使用方法与区别

    相比Java, Kotlin提供了不少高级语法特性.对于一个Kotlin的初学者来说经常会写出一些不够优雅的代码.在Kotlin中的源码标准库(Standard.kt)中提供了一些Kotlin扩展的内置函数可以优化kotlin的编码.Standard.kt是Kotlin库的一部分,它定义了一些基本函数. 这个源代码文件虽然一共不到50行代码,但是这些函数功能都非常强大. 一.回调函数的Kotin的lambda的简化 在Kotlin中对Java中的一些的接口的回调做了一些优化,可以使用一个lamb

随机推荐