zoukankan      html  css  js  c++  java
  • 进一步优化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;
                }
            }
        };
    }
  • 相关阅读:
    线性表的相关操作
    jq实现登陆页面的拖拽功能
    js实现登陆页面的拖拽功能
    HTML5存储
    js函数声明
    js打字机效果实现
    js日期显示效果
    js实现倒计时效果
    js中如何去获取外部css样式
    面向对象的几种方法详解(后)
  • 原文地址:https://www.cnblogs.com/tianzhijiexian/p/4176652.html
Copyright © 2011-2022 走看看