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;
                }
            }
        };
    }
  • 相关阅读:
    xplan.sql(本脚本获取执行计划显示执行顺序)
    闪回查询(SELECT AS OF)
    闪回事务查询
    闪回版本查询
    闪回数据库
    shell循环语句
    前后端交互json字符串
    element vuex 语音播报
    highcharts中数据列点击事件
    highcharts为X轴标签添加链接
  • 原文地址:https://www.cnblogs.com/tianzhijiexian/p/4176652.html
Copyright © 2011-2022 走看看