zoukankan      html  css  js  c++  java
  • android开发之记录ListView滚动位置

    这个问题本身不难,但是由于项目中的需求太过于复杂,结果导致这个问题变得不是那么容易实现。在网上一搜,结果如下:
    这里写图片描述

    我不知道是who copy who?反正介绍的所谓的三种方法,第一种都是无法运行的,很明显的bug,第二三种方法都是入门级知识,这几位大哥写博客自己都不先运行一下吗?

    唉,不吐槽了,说说我的解决方案吧:

    在需要记录滚动位置的地方执行下面的操作:

    int scrollPos = refreshListView.getFirstVisiblePosition();
                        View v1 = refreshListView.getChildAt(0);
                        int scrollTop = (v1 == null) ? 0 : v1.getTop();

    getFirstVisiblePosition方法用来记录当前第一个可见item的索引。
    int scrollTop = (v1 == null) ? 0 : v1.getTop();用来记录当前第一个可见item的偏移量。


    注意

    在你的项目中,你可能需要给View v1 = refreshListView.getChildAt(0);添加一个非空判断,判断与ListView适配的数据集是否为空。

    在需要恢复滚动位置的地方执行如下操作:

    refreshListView .setSelectionFromTop(scrollPos, scrollTop);

    有些人可能会选择记录下当前第一个可见item的位置,然后用setSelection方法来恢复位置,这样不是不可以,但是不够精确,因为很多情况下我们ListView中最上面的item不一定是刚刚显示出来,可能显示了一半隐藏了一半。所以个人认为上面介绍的方法比较合适。

  • 相关阅读:
    matlab中fft与fftshift命令小结(转)
    matlab 添加多行注释
    matlab colormap,caxis,shading,hsv,pcolor, alpha 表示(转)
    在线latex公式编辑器
    matlab 对话框弹出
    步态识别 概要
    JavaScript函数
    MySQL多表查询总结
    VS2005打不开 卡在登入状态
    about project
  • 原文地址:https://www.cnblogs.com/qitian1/p/6461748.html
Copyright © 2011-2022 走看看