ListView 中 getSelectedView() 和 getSelectedItem() 区别

本文探讨ListView的getSelectedView()和getSelectedItem()的区别。通常在使用中可能察觉不到差异,但在特定场景下,如切换时更新选中项效果,两者的不同会导致问题。作者遇到的bug是焦点状态切换时,选中项的颜色更新错误,原因是getSelectedView()返回的是焦点下一项。正确做法是根据焦点状态分别使用getSelectedView()和getSelectedItem()来设置颜色。
摘要由CSDN通过智能技术生成

本文是基于作者遇到的一个bug而来,如果正常情况下,可以不考虑本文做法。


从官方的注释上看getSelectedView()好像是得到当前选中的 item 的viewgetSelectedItem()得到的当前选中的 item 所绑定的数据。这两个得到的数据类型都不相同怎么比较?

首先,看到getSelectedItem()的源码 实现:

    /**
     * @return The data corresponding to the currently selected item, or
     * null if there is nothing selected.
     */
    public Object getSelectedItem() {
        T adapter = getAdapter();
        int selection = getSelectedItemPosition();
        if (adapter != null && adapter.getCount() > 0 && selection >= 0) {
            return adapter.getItem(selection);
        } else {
            return null;
        }
    }

可以看到 return 的是adapter.getItem(selection),也就是我们要重写的 Adapter 里面的getItem()函数。如果重写的时候我们返回的不是data数据,而是当前选中的itemView(自定义的view)的话,就可以与getSelectedView()相比较了(在重写getView()里面,已经把自定义的itemView设置为了convertView

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值