首页 > 其他分享 >Android ListView的事件监听

Android ListView的事件监听

时间:2023-06-28 20:14:17浏览次数:34  
标签:Log 监听 item position Android ListView AdapterView view

1、数据项点击事件,针对的是ListView每个数据项的点击事件

listView.setOnItemClickListener { _, _, position, _ ->
Toast.makeText(this, "position: $position", Toast.LENGTH_LONG).show()
}

2、ListView组件焦点事件(不是指单个item,是整个ListView)

listView.setOnFocusChangeListener { _, hasFocus ->
if (hasFocus) {
Log.d("MainActivity", "has focus ... ")
} else {
Log.d("MainActivity", "lose focus ...")
}
}

3、ListView中数据项被选中事件监听

bind.listView.onItemSelectedListener = object: AdapterView.OnItemSelectedListener{
override fun onItemSelected(parent: AdapterView<*>?,view: View?,position: Int,id: Long) {
Log.d("MainActivity", "position: $position")
}

override fun onNothingSelected(parent: AdapterView<*>?) {
Log.d("MainActivity", "onNothingSelected ...")
}
}

AdapterView.OnItemSelectedListener中有两个方法,onItemSelected在数据项被选中时触发,onNothingSelected在LiveView没有任何数据项被选中时触发。

4、监听ListView中item焦点的变化

假设有一个需求,item获取焦点背景颜色为blue,没有焦点的背景颜色为white,则伪代码如下:

Adapter中代码

class FruitAdapter(activity: Activity, private val resourceId: Int, data: List<Fruit>):
    ArrayAdapter<Fruit>(activity, resourceId, data) {

    var position: Int = 0

    override fun getView(position: Int, convertView: View?, parent: ViewGroup): View {
        Log.d("FruitAdapter", "position: $position  convertView: $convertView")
        val view = ... //加载布局伪代码
        if (this.position == position) {
            view.setBackgroundColor(Color.BLUE)
        } else {
            view.setBackgroundColor(Color.WHITE)
        }
        return view
    }
}

Adapter中定义了一个position,用来记录当前哪个item被选中,数值由Activity那边监听更新

MainActivity中代码

override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        val bind = ActivityMainBinding.inflate(layoutInflater)
        setContentView(bind.root)
        val fruitAdapter = FruitAdapter(this, R.layout.fruit_item, fruitList)
        bind.listView.adapter = fruitAdapter
        bind.listView.onItemSelectedListener = object: AdapterView.OnItemSelectedListener{
            override fun onItemSelected(parent: AdapterView<*>?,view: View?,position: Int,id: Long) {
                Log.d("MainActivity", "position: $position")
                fruitAdapter.position = position
                fruitAdapter.notifyDataSetChanged()
            }

            override fun onNothingSelected(parent: AdapterView<*>?) {
                Log.d("MainActivity", "onNothingSelected ...")
            }
        }
    }

看红色代码即可,获取ListView对象后,添加onItemSelectedListener 监听,然后把选中的item下标传递给Adapter。这时调用Adapter的方法notifyDataSetChanged()来通知Adapter刷新数据,再次执行Adapter中getView()方法,在getView方法中对下标进行了比较,相等下标的view背景色变为blue,否则变为while,这样就实现了ListView中item焦点变化事件的监听。

标签:Log,监听,item,position,Android,ListView,AdapterView,view
From: https://www.cnblogs.com/shibin90/p/17512424.html

相关文章

  • Android ListView运行效率优化
    上篇介绍了ListView的用法,链接如下,这篇主要讲解如何提升ListView的效率Android定制ListView的界面1、使用缓存布局ListView如果不进行优化,其运行效率是很低的,因为在Adapter类的getView方法中,每次都将布局重新加载一遍,当ListView快速滚动时,这就会成为性能瓶颈。Adapter类的get......
  • 讯飞离线语音合成新版(Aikit)-android sdk合成 demo(Java版本)
    前言:科大讯飞的新版离线语音合成,由于官网demo是kt语言开发的,咱也看不懂kt,搜遍了全网也没看到一个java版的新版离线语音demo,现记录下,留给有缘人参考!!!!!毕竟咱在这上面遇到了不少的坑。如果能留言指正,那就更好了。第一步:​ 官网注册账号---》实名认证---》点击语音合成---》离线语音......
  • React学习时,outlet配置(token判定,页面path监听)
    尽管写过outlet路由的配置。考虑到token判定和路由页变更,我不了解v6是不是有更详解的做法。决定调一下配置,期望在任何页面异步更新时,token都可以在跳转前被检测到,防止无token跳转发生。为src文件配置v6版本:路由子组件App.jsimport{HashRouter,Routes,Ro......
  • android ninepatch
    简介ninepatch是android提供的一种图片格式,以.9.png结尾,它可以根据实际情况横向或纵向的拉伸,它是png的一种特殊格式。ninepatch为什么会有ninepatch呢?比如,有个聊天图片message_left.png,当宽度设置为match_parent时,就产生了图片由于拉伸而很难看的问题。有鉴于此,android在它的sdk......
  • 直播平台怎么搭建,Android获取文本的宽度和高度
    直播平台怎么搭建,Android获取文本的宽度和高度方法一:先绘制文本所在的矩形区域,再获取矩形区域的宽度   Rectrect=newRect();  mPaint.getTextBounds(text,0,text.length(),rect);  canvas.drawRect(rect,mPaint);  floattextWidth1=rect.width(); ......
  • Android 小白在两年时间成为一个大牛,我究竟做了什么?
    初识Android=========“同学们,给大家介绍一下,我是你们未来一年的移动互联网开发讲师”,我在大三的时候,这是我和Android第一次交流,当时的课讲实话,我没听,一点都没有,只是知道了有个东西叫Android开发。还是和大多数人一样,做着自己喜欢的事情。我们专业并不是和移动开发相关的,这点......
  • Android:知道类加载过程面试还是卡壳?硬核总结,一网打净“类”的基础知识
    前言之前说了类加载的过程,但是有的读者表示还是有些面试题还是答不来,所以今天就来总结下类加载、对象实例化方面的知识点/面试题,帮助大家加深印象。全是干货,一网打尽类的基础知识!先看看下面的问题都能回答上来吗?描述new一个对象的过程,并结合例子说明。类初始化的触发时机。多线程进......
  • 2023年最新Android Framework源码高级笔记+学习路线图+硬核资料库,跪着啃完了。。。
    虽然疫情已经过去,餐饮、旅游一些实体经济迅速回暖,但是互联网的寒冬却还没有过去,很多大厂都在裁员,裁员比例还挺高,我们一千多人的公司就直接裁掉30%。今年的各大公司基本只有两个目标:一个是营收,那些投入产出比不高的项目或者事情都暂时搁置,可做可不做的就不做;另外一个就是降本增效,通......
  • 渣渣二本的辛酸面试之路:从深圳外包到杭州蚂蚁金服,4年小Android的爬坑历程
    写在开头笔者16年于长沙一个普通二本,毕业后去了满地都是机会的深圳。第一份工作是一家外包公司,主要业务是电商和电子支付信息安全方面的。一年后跳槽到华润旗下一个子公司做金融。至今已工作4年。大家都知道,对于跟我一样没有名校背景,也没有大厂出身的程序员来说,面试唯一的加分项就......
  • 转型Android系统开发,200份简历成功上岸(艰难的求职历程)
    今年的Android就业真的太不容易了,在找工作的过程中多次想放弃,被裁员两个月了,本科毕业5年,有大厂经历,Android应用4年,Android系统Framework半年左右,想要一个28K的工作都找不到。投递了200份简历,只有4个面试邀请。只好把屏蔽的外包公司都解开了,但外包的一般薪资只能达到20K左右。绝......