解决ListView 显示切换定位到指定索引,因为视图重绘导致的界面闪动,使界面过渡更平滑

当ListView数据更新并需要滚动到新数据末尾时,直接调用adapter.notifyDataSetChanged会导致界面跳回顶部。通过设置mListView.setSelection(index)虽然能定位,但大量数据滚动会产生明显闪动。解决方法是利用ListView的视图绘制监听器,控制在滚动到指定索引前不绘制视图,从而避免界面闪动,实现平滑过渡。
摘要由CSDN通过智能技术生成

   出现的场景,比如我们需要通过分页拉取新的数据,这时候数据集合会变化,此时一个正常的需求就是等数据加载成功后加入到ListView数据集合中,同时需要去把ListView滚动到新数据的最后一行,也就是ListView可视区域的第一行需要显示新数据的最后一行,以此让用户通过向下滚动去显示新数据;

   此时如果我们仅仅是调用adapter的notifyDataSetChanged会默认滚动到列表的最顶部,而这样的用户体验是不太友好的,这个时候我们可能会想到要设置顶部选中的条目为指定的索引,即使用mListView.setSelection(index),而这样会有一个明显的从底部滚动到index,如果数据较多这样滚动时界面闪动的厉害。

   解决方法如下:

   Android listView 提供了在绘制视图时的监听器,可以控制按需去展示最新视图,在滚动到指定索引之前不需输出视图到界面,这样就把问题解决了。

                //第一步:通知数据改变
                mAdapter.notifyDataSetChanged();
                //第二步:设置顶部条目索引
                mListView.post(new Runnable()
                {
                    
                    @Override
                    public void run()
                    {
                        mListView.setSelection(index);
                    }
                });
                //
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值