Kotlin版RecyclerView加item点击处理

android RecyclerView嵌套 RecyclerView 子item 和 父item点击事件如何处理 android列表嵌套列表,子itme 和 父item点击事件如何处理 阅读详情

之前个google定义kotlin为Android一级语言,小弟之前对kotlin也并不是很了解所以去了解之后写了一份有关kotlin版的RecyclerView希望对新学习kotlin的人有一些帮助。

在使用kotlin之前我们要对在As中下载kotlin的插件在重启As之后新建一个Android项目在As的code栏最下面有一个convert Java file to kotlin file 转换之后再Activity会有一个config的设置,它会帮你设置完kotlin在module的build.gradle和全局build.gradle中设置kotlin的一系列配置

我们来看看我们的MainActivity页面的操作

package com.example.liuqiang.kotlinforandroid

import android.app.Activity
import android.content.Context
import android.os.Bundle
import android.os.Handler
import android.os.Message
import android.support.v7.widget.LinearLayoutManager
import android.support.v7.widget.RecyclerView
import android.util.Log
import android.view.View
import android.widget.Button
import android.widget.Toast
import com.google.gson.*
import com.google.gson.reflect.TypeToken
import okhttp3.*
import java.io.IOException


class MainActivity : Activity() {
    //创建变量此处使用的网络访问是基于okhttp的
    var mOkHttpClient: OkHttpClient? = null
    var request: Request? = null;
    var body: FormBody? = null;
    var btn_back: Button? = null;
    val context: Context = this
    var recyclerView: RecyclerView? = null;
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        //加载数据
        loadData()
        //初始化控件和绑定事件
        btn_back = findViewById(R.id.btn_back) as Button;
        recyclerView = findViewById(R.id.recyclerView) as RecyclerView;
        btn_back!!.setOnClickListener {
            finish()
        }
    }

    fun loadData() {
        val path = "您的接口地址"
        //kotlin不需要new 可直接写
        mOkHttpClient = OkHttpClient()
        //对应参数
        body = FormBody.Builder()
                .addEncoded("key", "val")
                .build()
        request = Request.Builder().url(path).post(body).build()
        //此处是重写callback类也可以自己定义一个class类实现Callback
        mOkHttpClient!!.newCall(request).enqueue(object : Callback {
            override fun onFailure(call: Call?, e: IOException?) {
            }

            override fun onResponse(call: Call?, response: Response?) {
                if (response != null) {
                    if (response.isSuccessful) {
                        //拿到服务器返回参数
                        var response = response.body().string();
                        Log.d("###",response);
                        try {
                            //使用Gson解析返回数据
                            var gson: Gson = Gson()
                            var json: JsonParser= JsonParser();
                            var jent: JsonElement=json.parse(response) as JsonElement;
                            var job:JsonObject = jent.asJsonObject;
                            var jar: JsonArray;
                            jar = job.getAsJsonArray("rows");
                            //拿到gson类解析tyep
                            val turnsType = object : TypeToken<ArrayList<TestInfo>>() {}.type
                            val list: ArrayList<TestInfo>;
                            //完成解析
                            list = gson.fromJson<ArrayList<TestInfo>>(jar, turnsType);
                            //通知recyclerView
                            var message = Message();
                            message.obj = list;
                            hand.sendMessage(message);
                        } catch(e: Exception) {
                            println(e.message);
                        }

                    }
                }
            }

        });

    }
    //完成recyclerView适配
    var hand = object : Handler() {
        override fun handleMessage(msg: Message?) {
            super.handleMessage(msg)
            val list: ArrayList<TestInfo>;
            list = msg!!.obj as ArrayList<TestInfo>
            recyclerView!!.layoutManager = LinearLayoutManager(context);
            recyclerView!!.adapter = TestAdapter(list, context,itemClick());
        }
    }
    //inner关键字可以方位外部类的参数
    //次类是处理recyclerView的点击事件的
    inner class itemClick: ItemClick{
        override fun OnItemClick(v: View, position: Int) {
            Toast.makeText(context,"你点击了第"+(position+1)+"个",Toast.LENGTH_LONG).show();
        }
    }

}

在adapter里面我们绑定了item点击接口的处理

package com.example.liuqiang.kotlinforandroid

import android.content.Context
import android.support.v7.widget.RecyclerView
import android.support.v7.widget.RecyclerView.Adapter
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ImageView
import android.widget.TextView
import android.widget.Toast
import com.bumptech.glide.Glide
import com.example.liuqiang.kotlinforandroid.TestAdapter.MyHolder
import java.io.File

class TestAdapter : Adapter<MyHolder> {
    //定义参数
    var list: List<TestInfo>? = null;
    var contxt: Context? = null;
    //获得事件回调接口
    var item:ItemClick?=null;

    //初始化数据
    constructor(list: ArrayList<TestInfo>, contxt: Context,item:ItemClick) {
        this.list = list;
        this.contxt = contxt;
        this.item=item;
    }

    override fun onCreateViewHolder(parent: ViewGroup?, viewType: Int): MyHolder {
        //得到itemView
        var v: View = LayoutInflater.from(contxt).inflate(R.layout.item, null, false);
        var holder = MyHolder(v);
        //为itemView绑定点击事件
        v.setOnClickListener(onClick());
        return holder;
    }

    override fun getItemCount(): Int {
        var size = list!!.size
        return size;
    }

    override fun onBindViewHolder(holder: MyHolder?, position: Int) {
        var name = list!!.get(position).username;
        holder!!.txtName.setText(name);
        var dept = list!!.get(position).deptname;
        var path = "您的图片地址;
        if(path.contains(".jpg")||path.contains(".png")){
            Glide.with(contxt)
                    .load(path)
                    .thumbnail(0.1f)//使用原图的10/1作为略缩图
                    .into(holder.image_head);
        }else{
            holder.image_head.setImageResource(R.drawable.mv);
        }
        //得到position防止滑动点击错位
        holder.itemView.setTag(position);
        holder.bonus.setText(dept);

    }
    
    //viewHolder

    public class MyHolder(itemView: View?) : RecyclerView.ViewHolder(itemView) {
        var image_head: ImageView = itemView!!.findViewById(R.id.image_head) as ImageView;
        var txtName: TextView = itemView!!.findViewById(R.id.txtName) as TextView;
        var bonus: TextView = itemView!!.findViewById(R.id.bonus) as TextView;
    }

    //调用接口回调
    inner class onClick:View.OnClickListener{
        override fun onClick(v: View?) {
            var positon:Int= v!!.getTag() as Int;
            if(item==null){
                Toast.makeText(contxt,"哈哈哈",Toast.LENGTH_LONG).show();
            }
            item!!.OnItemClick(v,positon);
        }

    }

}

itemView点击处理接口

package com.example.liuqiang.kotlinforandroid

import android.view.View

/**
 * Created by liuqiang on 2017/5/23.
 */
interface ItemClick {
    fun OnItemClick(v: View,position:Int);
}

实体类

package com.example.liuqiang.kotlinforandroid

import java.io.Serializable

/**
 * Created by liuqiang on 2017/5/21.
 */

//data 是数据类的关键字 默认给字段配置get和set方法
data class TestInfo(var username:String, var fileContent:String,var deptname:String): Serializable{

}
最后的utils类

package com.example.liuqiang.kotlinforandroid

import android.app.ProgressDialog
import android.content.Context

/**
 * Created by liuqiang on 2017/5/21.
 */
class Utils {
    var dialog:ProgressDialog?=null;
    fun showProgressDialog(context:Context,message:String,isFouse:Boolean){
        if(dialog==null){
            dialog=ProgressDialog(context);
        }
        dialog!!.setMessage(message);
        dialog!!.setCancelable(isFouse);
        dialog!!.setCanceledOnTouchOutside(isFouse);
        dialog!!.show();
    }

    fun cancelProgressDialog(){
        if(dialog!=null){
            dialog!!.dismiss();
            dialog=null;
        }
    }
}



Kotlin实战(二): 实现RecyclerView多种Item布局 前言RecyclerView出来很久了,可以说一出来就将ListView给比下去了,当然,Recyclerview有它的好,ListView的好,并不是说一定要用Recyclerview,最适用自己项目的才是最好的。在这里我们将用Kotlin来实现RecyclerView的多种item布局,和单个item布局,同时写一个通用的Adapter。使用先将写完的代码的使用方式展示一下:一种item布局cl 阅读详情

相关推荐

RecyclerView的Item点击事件处理不同的业务

第一种: 给封装实体类里面添加一个代表"选中"状态的参数去处理业务逻辑 Bean: private Boolean isselset; public Boolean getIsselset() { return isselset; } public void setIsselset(Boolean isselse...

奈 1196

Android中实现RecyclerView,并对item及其多个子控件的点击事件监听

如下图所示,在对RecyclerView中item及其多个子组件都需要不同的点击事件监听处理,需要使用到adapter的OnItemClickListener和OnItemChildClickListener两个对象。

weixin_42966151的博客 4522

Kotlin编写RecyclerView的Adapter

Kotlin编写RecyclerView的Adapter kotlin在现在的Android开发中已经较为常见,空闲之余学习一下还是非常必要的,没准儿哪天就可以利用它进行些骚操作呢(梦想还是要有的)。 利用Kotlin编写一个简单的Adapter class SimpleAdapter(private val context: Context, private val data: Lis

arrol1786936883的博客 2131

Android kotlin使用RecyclerView自定义adapter实例和点击事件

1.创建adapter class RecyclerViewAdapter(val items: List ,var context:Context) : RecyclerView.Adapter<RecyclerViewAdapter.ViewHolder>() { override fun onCreateViewHolder(parent: ViewGroup, viewType...

安卓兼职framework和app工程师的博客 2757

3.2.2 完全掌握在 Kotlin 中实现 RecyclerView

点此进入:从零快速构建APP系列目录导图点此进入:UI编程系列目录导图点此进入:四大组件系列目录导图点此进入:数据网络和线程系列目录导图如果你对RecyclerView还没有完全了解,可参看我的这一篇:3.2.1 一篇文章完全掌握 RecycleView 的六大用法 想要知道 Kotlin 是如何简化我们的人生的个很有趣的方式就是去创造一个 RecyclerView 适配器,在上一篇中,我们学

WillFlow的博客 2645

Shopee App加密算法逆向实战:从抓包到libshpssdk.so的深度解析

本文详细解析了Shopee App加密算法的逆向过程,从网络抓包发现加密参数入手,通过Frida动态Hook定位到Java层关键方法,并深入追踪至Native层的libshpssdk.so核心函数。文章结合实战演示了如何利用Unidbg模拟执行环境进行算法分析与验证,并探讨了核心参数生成逻辑及风控规避要点,为移动安全与逆向工程研究提供了完整的技术路径。

weixin_28347369的博客 527

Kotlin Adapter的点击事件

自定义接口 //自定义接口 interface OnTargetClickListener{ fun onclick() } var targetlistener:OnTargetClickListener?=null fun setOnItemClickListener(listener: OnTargetClickListener){ targetlistener=listener } 在onBindViewHolder.

afufufufu的博客 1227

Simulink封装与库的建立

第二栏设置标签,第三栏是对应变量名,即是第一张图中的常量名。1.先将输入与常量模块相连接并生成子系统。按照如图所示添加修改,最后的效果如下图。封装子系统搭建测试环境。

lensyu1994的博客 1741

[Android]RecyclerView基本使用+adapter回调接口实现点击事件

一、概述 RrcyclerView是ListView的加强版,不仅可以轻松实现和ListView同样的效果,还优化了ListView中存在的各种不同之处。 Android官方推荐我们使用RecyclerView。 二、基本用法 1.首先需要在项目的build.gradle中添加相应的依赖库: implementation 'com.android.support:recyclervie...

Ekko的博客 4935

解决VM 与 Device/Credential Guard 不兼容。在禁用 Device/Credential Guard 后,可以运行 VM 的方法

在启用了Credential Guard或Device Guard的Windows 10主机上启动12.5版之前的VMware Workstation中的虚拟机时,将显示蓝色诊断屏幕(BSOD)。 会看到类似于以下内容的错误: VMware Workstation和Device / Credential Guard不兼容。禁用Device / Credential Guard后,可以运行VMwar...

Hern(宋兆恒) 39万+

【Codex】Codex安装+DeepSeek API接入;无需登录,手把手带你使用codex

好多人使用codex时都卡在验证码登录那一步,今天就来介绍一种方法,不需要登录ChatGPT的账号,自然也就不需要手机验证码了;接入DeepSeek的api,一样可以丝滑使用codex;记录从零开始安装使用codex以及DeepSeek API接入的整个过程。不需要登录openAI;

AnChenliang_1002的博客 3539

Kotlin系列二(Kotlin实现RecyclerView加item点击处理)

上一篇讲了kotlin基础语法,这一篇讲的是kotlin在Android开发中的实际应用,希望对正在学习的小伙伴有帮助。谢谢! 添加的依赖: /*RecyclerView*/ implementation 'com.android.support:recyclerview-v7:26.1.0' /*retrofit*/ compile 'com.squareup.retrofit2:ret...

yin_young的博客 4476

基于多传感器融合的智身四足机器狗楼梯环境SLAM系统设计与实现

本文设计了一种基于多传感器融合的四足机器狗楼梯环境SLAM系统。系统采用Jetson Orin NX为主控制器,集成RealSense D435i深度相机和Livox Mid360激光雷达,在ROS2框架下实现平面定位精度<5cm、楼梯环境下导航不漂移的目标。通过多层次传感器融合策略、运动学约束优化和状态切换机制,解决了楼梯环境下的定位累积误差问题,实现了平面与楼梯环境的自动识别切换及精度复位功能。硬件设计注重传感器布局优化和精确标定,软件架构采用分层设计,确保实时性能。该系统为四足机器人在复杂地形中

huanghm88的专栏 241

kotlin——recyclerview 中的 item 点击事件(lambda 表达式)

使用 kotlin 实现 recyclerview 的条目点击事件(lambda 表达式) 首先看一下类 Java 的实现方式 自定义接口从而实现点击事件的处理 // 定义一个接口,用接口的形式来处理点击事件 interface OnItemClickListener { fun onItemClick(pos: Int) } // 自定义一个 Adapter 类 class ItemAdapter() { var mOnItemClickListener: OnItemClickListener?

jtlack的博客 2879

24. SAP UI5 应用如何使用 OData 数据模型

本教程之前的二十三个步骤,使用的数据模型都是 JSON 模型。从本步骤开始,我们要学习另一种非常重要的数据模型:OData 数据模型。 OData 数据模型也是 SAP 产品里广泛使用的数据模型,比如 SAP S/4HANA,SAP CRM Fiori 应用等等,都使用的是 OData 数据模型而不是 JSON 数据模型。 使用 OData 数据模型的典型场景就是,通过 OData 模型提供的 Read API,将远端服务器上存储的数据通过 OData 协议读取到客户端,并显示在 SAP UI5 应用里。.

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 5797

如何将 Fiori Elements Object Page Header 工具栏里按钮用 JavaScript 代码设置成禁用状态

本文介绍了如何在SAP Fiori Elements应用中动态控制Object Page工具栏按钮的可用状态。通过UI5 Inspector工具分析发现,这些按钮的enabled属性都双向绑定到/ui/enabled模型字段。在StatusExt.controller.js中,通过获取按钮ID前缀拼接完整控件ID,使用setEnabled(false)方法即可禁用按钮。关键点包括:1)使用extensionAPI获取视图ID前缀;2)注意事件回调中的this上下文绑定;3)通过修改模型字段可同步更新所有绑定

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 373

Android RecyclerView使用总结(Kotlin)

RecyclerView使用总结(Kotlin)一、前言二、开始1、布局文件2、初始化用到的数据3、recyclerView设置布局管理器4、适配器5、设置点击事件6、下拉刷新,上拉加载更多7、拖拽移动、滑动删除8、适配器完整代码9、含多种item布局的recyclerView三、结尾 一、前言 最近在学kotlin语言,所以写了这个Demo来练手,顺便复习一下RecyclerView的使用。 Demo效果图: 二、开始 1、布局文件 这是Demo的主布局文件,由于使用到一个下拉刷新,上拉加载的开源框

weixin_44902943的博客 4366

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Kotlin中androidx..RecyclerView的BaseQuickAdapter给子item添加点击事件

文章目录相关依赖BaseQuickAdapteradapter初始化给子item添加点击事件 相关依赖 allprojects { repositories { ... maven { url 'https://jitpack.io' } } } dependencies { implementation 'com.github.CymCh...

The blog of 优快云 in 杨天福 1万+

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

在Fragment中实现RecyclerView的Item点击事件

1.新建RecycleViewAdapter类,继承自RecyclerView.Adapter<RecycleViewAdapter>,添加如下方法: private View.OnClickListener getOnClickListener(final int position) { return new View.OnClickListener() { ...

RoseChilde的博客 2904

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

RecyclerView动态添加item和删除item(基于kotlin)

核心代码:activity class MainActivity : AppCompatActivity() { var codeAdapter: CodeAdapter? = null var count: Int = 1 var stringSparseArray: SparseArray<String>? = null var mPosition :Int = -1 override fun onCreate(savedInstanceStat

一个黑曼巴的博客 2520

Recyclerview的Adapter的使用以及item以及item内部的点击事件

这个是Activity的调用 package com.app.chuanghehui.ui.activity import android.support.v7.app.AppCompatActivity import android.os.Bundle import android.support.v7.widget.DividerItemDecoration import android.s...

MR_Condingson的博客 828

Formily ArrayCards 卡片数组组件完全指南:Schema 场景下的字段密集型数组表单实战

> ArrayCards 是 Formily 体系([@formily/antd](https://link.gitcode.com/i/420cc82231b5420c09f3dd48ebb6fef3))中基于 antd Card 实现的卡片列表组件,专为「每行字段数量较多、联动逻辑较多」的数组场景设计。它只适用于 Schema(Markup Schema / JSON Schema)驱动场景。

gitblog_00079的博客 544

Android RecyclerView Sample常见问题解答:10个要点新手必知

**Android RecyclerView Sample** 是 Android 开源社区提供的官方 RecyclerView 列表控件示例应用,用最简洁的代码演示了"线性布局 + 网格布局"两种LayoutManager的切换方式,是新手学习 RecyclerView 的最佳入门教程。本文以常见问题解答(FAQ)的形式,整理了 **10 个新手最常踩坑的要点**,帮你快速读懂源码、跑起项目并灵

gitblog_00316的博客 1050

kepler.gl Draw on Map 绘图功能完全指南:点线面绘制、空间过滤与数据提取

Draw on Map 是 kepler.gl 内置的地图绘制能力,允许用户直接在画布上绘制点、线、多边形、矩形与圆形,并将这些草图用于空间过滤、数据提取或转换为图层。本文以 [docs/user-guides/draw-on-map.md](https://link.gitcode.com/i/0d1d1d80ef0d28e5a5d8a572b886a646) 为骨架,结合仓库源码与 Redux

gitblog_00493的博客 486

RecyclerView的item点击,长按事件

利用回调: 在RecycleView.Adapter中: 加入接口(如果除了点击item和position外还需要别的参数,可在此时加入): public interface OnItemClickListener{ void onItemClick(View view,int position); } 然后加入: private OnItemClickListe

504
上一篇: Android和H5交互之初学H5
fire_nirvana
博客等级 码龄10年 1粉丝 12原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值