ListView控件的使用

这篇具有很好参考价值的文章主要介绍了ListView控件的使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

ListView是由ListView控件、Adapter适配器、ListView子布局、传入的数据格式、指定Adapter适配器  共5个部分组成

首先,在想要使用ListView控件的地方写上ListView控件

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <ListView
        android:id="@+id/listView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        tools:ignore="MissingConstraints" />

</androidx.constraintlayout.widget.ConstraintLayout>

 编写ListView的每条的布局,也就是ListView的子布局

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <TextView
        android:id="@+id/text_name"
        android:layout_width="200dp"
        android:layout_height="wrap_content"
        android:text="name"
        android:gravity="center"
        android:textSize="32sp"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"/>
    <TextView
        android:id="@+id/text_sore"
        android:layout_width="200dp"
        app:layout_constraintHorizontal_weight="1"
        android:layout_height="wrap_content"
        android:text="sore"
        android:gravity="center"
        android:textSize="32sp"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintLeft_toRightOf="@id/text_name"/>
</androidx.constraintlayout.widget.ConstraintLayout>

这里我写了两个并列的textview,效果如下:

ListView控件的使用

 编写传入数据的数据格式

data class Student(val name:String,val sore:Int)

编写一个类,规定你传入的数据格式。 

 最重要的部分来了,编写Adapter适配器

class Adapter(context: Context, private val resourceId: Int, data: ArrayList<Student>) :
    ArrayAdapter<Student>(context, resourceId, data) {


    //新增一个内部类来缓存控件的实例,可以提高listview的运行效率
    inner class ViewHolder(val name: TextView, val sore: TextView)
    //重载getView方法来建立 传入的数据 和 view 之间的连接
    override fun getView(position: Int, convertView: View?, parent: ViewGroup): View {
        //用于缓存控件实例
        val viewHolder: ViewHolder
        //用于引入view
        val view: View
        //convertView可以缓存保存的view,使listView在滚动时不必重新加载
        if (convertView == null) {
            //引入view
            view = LayoutInflater.from(context).inflate(resourceId, parent, false)
            //创建控件实例
            val name: TextView = view.findViewById(R.id.text_name)
            val sore: TextView = view.findViewById(R.id.text_sore)
            //缓存控件实例
            viewHolder = ViewHolder(name, sore)
            //将viewHolder保存到View中
            view.tag = viewHolder
        } else {
            view = convertView
            viewHolder = view.tag as ViewHolder
        }
        //根据位置取出数据
        val student = getItem(position)
        //写入缓存的View实例中
        if (student != null) {
            viewHolder.name.text = student.name
            viewHolder.sore.text = student.sore.toString().ifEmpty { "Error" }
        }
        return view
    }

}

最后,指定适配器并传入数据

class MainActivity : AppCompatActivity() {

    lateinit var binding: ActivityMainBinding
    override fun onCreate(savedInstanceState: Bundle?) {
        binding = ActivityMainBinding.inflate(layoutInflater)
        super.onCreate(savedInstanceState)
        //构建假数据,测试使用
        val list = ArrayList<Student>()
        repeat(10) {
            list.add(Student("A1", 89))
            list.add(Student("B2", 89))
            list.add(Student("C3", 89))
        }
        //指定适配器并将数据传入
        binding.listView.adapter = Adapter(this, R.layout.item_student, list)
        setContentView(binding.root)
    }
}

执行效果如下:

ListView控件的使用

 设置子项点击事件

    //为listview中的子项设置点击
        binding.listView.setOnItemClickListener { parent, view, position, id ->
            val student = list[position]
            Toast.makeText(this, "name:${student.name},sore:${student.sore}", Toast.LENGTH_LONG)
                .show()
        }
    }

点击效果如下:

ListView控件的使用文章来源地址https://www.toymoban.com/news/detail-417537.html

到了这里,关于ListView控件的使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • WPF真入门教程12--ListView控件

           ListView 控件在Windows应用程序中常用,用于表示数据列表。如果您以前使用过 WinForms,那么您对ListView的实用性有一个很好的了解,但您应该意识到 WPF中的ListView 不像WinForms版本那样使用。再一次的主要区别在于,虽然WinForms ListView只是调用Windows API 函数来呈现常见的

    2024年02月04日
    浏览(52)
  • c# 从零到精通 form界面之listView控件

    c# c# 从零到精通 form界面之listView控件 using System; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; namespace Test04 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { if (textBox1.Text == “”) { MessageBox.Show(“项目

    2024年02月08日
    浏览(44)
  • flutter 之 ListView的使用与详解 map for listview.builder 的使用

    注:ListView的垂直布局中直接加 container ,container 的宽度是自适应宽度的,设置宽度无效! 注:ListView水平布局中直接加 container ,container 的高度是自适应宽度的,设置高度无效! // news.dart 引入data 数据,并动态处理数组;

    2023年04月20日
    浏览(39)
  • 【QT】重写QAbstractLIstModel,使用ListView来显示多列数据

    qt提供了几个视图来进行信息的列表显示,QListView可以用来显示继承QStractListModel的字符串列表中的字符串,默认的模型里面只包含一列的内容: 这里以qml为例子,先新建一个qml的项目,示例代码如下: 先创建一个列表的只读模型,以QAbstractListModel为基类,最基础的只用实现

    2024年02月12日
    浏览(44)
  • Flutter ios 使用ListView 。滚动时 AppBar 改变颜色问题

    在Ios 中 列表滚动条向下滚动一段距离后 会导致 AppBar 颜色改变  可以给 AppBar 或者 AppBarTheme。 scrolledUnderElevation: 0.0 属性 全局: 局部: 效果:  滚动前 滚动后 x ke z

    2024年04月17日
    浏览(37)
  • 【QML】使用 QtQuick2的ListView创建一个列表(一)

    qtquick2版本和qtquick1版本分别提供了一个ListView组件供使用,两个组件在使用上和属性的提供上还是有比较大的差异的,因为qtquick2是新的,所以就以改版本为基础学习如何使用; 首先,要知道ListView提供了那些属性提供修改,那些是只读,各个属性的类型是啥,这些可用在Q

    2024年02月09日
    浏览(37)
  • webUI下使用IP-adapter的简要说明

    IP-adapter是一个最近比较火的模型,但是在webUI下使用,经常会报各种各样的错误,这里简单讲一下模型匹配问题的处理方式,希望对你有帮助。 错误案例说明: 比如说选择了sdxl的模型,并且选择了ip-adapter_clip_sdxl_plus_vith预处理器后,模型选择ip-adapter_xl [4209e9f7], 可能会遇到

    2024年04月12日
    浏览(57)
  • Stable Diffusion使用ControlNet:IP-Adapter实现图片风格迁移

    IP-Adapter 全称是 Text Compatible Image Prompt Adapter for Text-to-Image Diffusion Models(文本到图像扩散模型的文本兼容图像提示适配器),是腾讯研究院出品的一个新的ControlNet模型,旨在使预训练的文本到图像扩散模型能够生成具有图像提示的图像。 IP-Adapter是一种有效的轻量级适配器,

    2024年04月28日
    浏览(56)
  • 人工智能是由谁领导开发的?

    作者:禅与计算机程序设计艺术 近几年,人工智能领域经历了从“小机器人”到“AlphaGo”再到“华为在手臂上拍了一张照片之后还可以识别人的生理特征”等重大突破性进展。但是,在这项科技浪潮中,究竟存在哪些团队和个人在推动其发展,又是怎样的角色扮演者参与其

    2024年02月06日
    浏览(40)
  • Android中SQLite数据库增删改查/使用ListView显示数据库内容(有完整源码)

    android作业笔记 编写SQLite数据库相关操作的代码,实现下图中的功能(第一排按钮布局没有调整屏幕大小适配…不过下面那一排加了 android:layout_weight=“1”) SQLite展示 先上源码:https://gitee.com/meng-fanyang/SQLiteWork 里边有三个分支,对应这不同的写法: master主分支是写的可以说

    2024年02月09日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包