• 进一步优化ListView


    之前我已经分享过一篇:viewHodler的通用写法,就是专门用来优化listview的加载的,但是对于复杂的布局,我们还需要在listview滑动和不滑动时进行自己的处理,今天我看到一篇文章就是讲这方面的,虽然不是很完善,但思想已经对了。

    主要思想:

    • 监听滑动据加载,异步加载数据
    • 避免同一个视图重复加载
    • getView 函数一定不能耗时,有耗时任务要异步加载

    实现方法:

    • 先判断当前 ListView 的状态,只有 ListView 停止滑动或缓慢滑动的时候才开启新线程加载数据,其他状态(快速滑动listview)均忽略加载。

    • 使用 getFirstVisiblePosition 和 getLastVisiblePosition 方法来显示 item。

    • 耗时任务一定不要在 getView 方法中进行,最好异步进行。

    下面的方法仅仅是起一个说明的作用,实际中还需要判断list的滑动速度什么的

    import android.widget.AbsListView;
    
    public class d {
    
        // 1. 判断listView状态
        AbsListView.OnScrollListener onScrollListener = new AbsListView.OnScrollListener() {
            // 触摸事件
            public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
                // TODO:init
            }
    
            public void onScrollStateChanged(AbsListView view, int scrollState) {
                switch (scrollState) {
                case AbsListView.OnScrollListener.SCROLL_STATE_FLING:// 滑动状态
                    threadFlag = false;
                    break;
                case AbsListView.OnScrollListener.SCROLL_STATE_IDLE:// 停止
                    threadFlag = true;
                    startThread();// 开启新线程,加载数据
                    break;
                case AbsListView.OnScrollListener.SCROLL_STATE_TOUCH_SCROLL:// 触摸listView
                    threadFlag = false;
                    break;
                default:
                    // Toast.makeText(contextt, "default",
                    // Toast.LENGTH_SHORT).show();
                    break;
                }
            }
        };
    }
  • 相关阅读:
    努力的一分不会少
    C语言中的数组的访问方式
    代码的规划与规范化
    Manjaro中源码安装gcc7.1
    周围都是敌人,方法总比问题多
    elementary os 0.4.1下编译GCC-7.1源码并安装成功
    C语言中的基础知识变量探讨
    19年的桌面KDE的风雨和陪伴,没有什么能够割舍
    《手把手教你学C语言》学习笔记(10)--- 程序的循环控制
    copy 的实现原理与深浅拷贝
  • 原文地址:https://www.cnblogs.com/tianzhijiexian/p/4176652.html
Copyright © 2020-2023  润新知