转载:http://blog.csdn.net/yy1300326388/article/details/45153813

数据源配置(Adapter)

package com.zhengsonglan.listview_loading.adapter;import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;import com.nostra13.universalimageloader.core.ImageLoader;
import com.zhengsonglan.listview_loading.R;
import com.zhengsonglan.listview_loading.entity.UserEnity;import java.util.List;/****/
public class MyAdapter extends BaseAdapter {Context context;LayoutInflater inflater;List<UserEnity> lists;private  boolean scrollState=false;public void setScrollState(boolean scrollState) {this.scrollState = scrollState;}public MyAdapter(Context context, List<UserEnity> lists) {this.context=context;this.inflater=LayoutInflater.from(context);this.lists=lists;}@Overridepublic int getCount() {return lists!=null?lists.size():0;}@Overridepublic Object getItem(int position) {return lists.get(position);}@Overridepublic long getItemId(int position) {return position;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {ViewHolder viewHolder;if (convertView == null) {convertView=inflater.inflate(R.layout.main_item,null,true);viewHolder=new ViewHolder();viewHolder.iv_icon= (ImageView) convertView.findViewById(R.id.main_item_iv_icon);viewHolder.tv_name= (TextView) convertView.findViewById(R.id.main_item_tv_name);convertView.setTag(viewHolder);} else {viewHolder= (ViewHolder) convertView.getTag();}UserEnity userEnity=lists.get(position);String img_url=userEnity.getIcon();if (!scrollState){viewHolder.tv_name.setText(userEnity.getName());viewHolder.tv_name.setTag(null);ImageLoader.getInstance().displayImage(img_url,viewHolder.iv_icon);viewHolder.iv_icon.setTag("1");}else{viewHolder.tv_name.setText("加载中");viewHolder.tv_name.setTag(userEnity.getName());viewHolder.iv_icon.setTag(img_url);viewHolder.iv_icon.setImageResource(R.mipmap.ic_launcher);}return convertView;}static class ViewHolder{TextView tv_name;ImageView iv_icon;}
}

这个Adapter中重要的代码如下:

//定义当前listview是否在滑动状态
private  boolean scrollState=false;
public void setScrollState(boolean scrollState) {this.scrollState = scrollState;
}
//实体类
UserEnity userEnity=lists.get(position);if (!scrollState){//如果当前不是滑动的状态,我们填充真数据//填充数据viewHolder.tv_name.setText(userEnity.getName());//设置Tag中数据为空表示数据已填充viewHolder.tv_name.setTag(null);//加载图片ImageLoader.getInstance().displayImage(img_url,viewHolder.iv_icon);//设置tag为1表示已加载过数据viewHolder.iv_icon.setTag("1");}else{//如果当前是滑动的状态,我们填充假数据viewHolder.tv_name.setText("加载中");//将数据name保存在Tag当中viewHolder.tv_name.setTag(userEnity.getName());//将数据image_url保存在Tag当中viewHolder.iv_icon.setTag(img_url);//设置默认显示图片(最好是本地资源的图片)viewHolder.iv_icon.setImageResource(R.mipmap.ic_launcher);}

我们在看看Activity中的代码,主要是监听listview的onscrolllistener方法

@Overridepublic void onScrollStateChanged(AbsListView view, int scrollState) {switch (scrollState){case AbsListView.OnScrollListener.SCROLL_STATE_IDLE://停止滚动{//设置为停止滚动myAdapter.setScrollState(false);//当前屏幕中listview的子项的个数int count = view.getChildCount();Log.e("MainActivity",count+"");for (int i = 0; i < count; i++) {//获取到item的nameTextView tv_name = (TextView) view.getChildAt(i).findViewById(R.id.main_item_tv_name);//获取到item的头像ImageView iv_show= (ImageView) view.getChildAt(i).findViewById(R.id.main_item_iv_icon);if (tv_name.getTag() != null) { //非null说明需要加载数据tv_name.setText(tv_name.getTag().toString());//直接从Tag中取出我们存储的数据name并且赋值tv_name.setTag(null);//设置为已加载过数据}if (!iv_show.getTag().equals("1")){//!="1"说明需要加载数据String image_url=iv_show.getTag().toString();//直接从Tag中取出我们存储的数据image——urlImageLoader.getInstance().displayImage(image_url, iv_show);//显示图片iv_show.setTag("1");//设置为已加载过数据}}break;}case AbsListView.OnScrollListener.SCROLL_STATE_FLING://滚动做出了抛的动作{//设置为正在滚动myAdapter.setScrollState(true);break;}case AbsListView.OnScrollListener.SCROLL_STATE_TOUCH_SCROLL://正在滚动{//设置为正在滚动myAdapter.setScrollState(true);break;}}}

最后记得给listview加上滑动的监听

listview.setOnScrollListener(this);

效果

Android Listview滑动时不加载数据,停下来时加载数据,让App更优相关推荐

  1. Android之 ListView滑动时不加载图片

    listview加载图片优化的功能, 在我们使用新浪微博的时候,细心的同学一定发现了,在滑动的过程中,图片是没有被加载的, 而是在滑动停止时,才加载图片了. 我们今天就做一个这样的效果吧. 我们先考虑 ...

  2. LIstview滑动时不加载图片,停止时加载!

    //参照 http://blog.csdn.net/yy1300326388/article/details/45153813 public class CarWashDistanceAdapter ...

  3. android listview 滑动条显示_第七十六回:Android中UI控件之RecyclerView基础

    各位看官们,大家好,上一回中咱们说的是Android中UI控件之ListView优化的例子,这一回咱们说的例子是UI控件之RecyclerView.闲话休提,言归正转.让我们一起Talk Androi ...

  4. android listview 滑动条显示_ListView详细介绍与使用

    前言介绍: 关于 ListView 我们大家都应该是非常的熟悉了,在 Android 开发中是经常用到的,今天就再来回顾一下,ListView 的使用方法,和一些需要优化注意的地方,还有日常开发过程中 ...

  5. 利用百度APIStoreSDK获取Json数据并解析加载到ListView上

    效果图(这里只是截取了List中的一项): 一.:登录百度ApiStore,获取移动sdk Android版(同时有使用文档和示例),将jar包导入到项目中 Android Studio请在放入lib ...

  6. Android中关于Volley的使用(二)加载Json数据

    前面一篇关于Volley的文章中,我们学习了如何利用ImageRequest去网络中加载图片,那么今天我们就来学习一下如何利用volley去网络中加载Json格式数据,并将其展示在一个ListView ...

  7. h5中performance.timing轻松获取网页各个数据 如dom加载时间 渲染时长 加载完触发时间...

    在控制台中输入window.performance.timing(html5的属性); 各字段的含义: · navigationStart:当前浏览器窗口的前一个网页关闭,发生unload事件时的Un ...

  8. Vue + Element 实现请求加载数据时显示动效( Loading 加载 )

    一.版本说明,参考 Element 官网 "vue": "^2.5.2", "axios": "^0.18.1", &q ...

  9. android——rxjava异步Consumer类似promise、重试机制、网络请求失败重试、合并两个异步都完成才往下运行、实现数据缓存优先加载

    1.rxjava异步Consumer 导入fxjava包: implementation 'io.reactivex.rxjava3:rxjava:3.0.6' // rxBinding已经依赖了rx ...

最新文章

  1. MASK-RCNN是什么?MASK(掩膜)又是什么?
  2. Local模式下Spark程序只输出关键信息
  3. Q4,IT人从来没输过!
  4. LiveVideoStack音视频技术年度评奖启动
  5. 【Java从入门到天黑|06】高质量男性SpringBoot入门及原理(基础总结版,强烈建议收藏)
  6. python价值观测试程序例子_PyBrains学习迷宫的例子。国家价值观与全球政策
  7. Jmeter 压测基础笔记
  8. 【英语】The Little Prince
  9. 服务器虚拟机系统镜像安装win7系统,在虚拟机中怎么安装Win7旗舰版系统
  10. 桂林老兵php,中间件解析漏洞
  11. 16种常用的数据分析方法-相关分析
  12. 5.1.3 NoSQL数据库-Redis(键值key-value)-五大数据类型
  13. 线性代数 06 克莱默法则
  14. 基于51单片机的带方位指示的自行车码表proteus仿真原理图PCB
  15. DAMA数据治理与数据质量--非结构化数据的数据质量管理
  16. echarts图例样式单独设置
  17. 红旗linux中科红旗发布Linux7.0 RC1桌面版操作系统
  18. 时钟同步服务Chrony
  19. 【虚拟现实】Unity3D+VR的实现
  20. PSPICE-AA灵敏度分析

热门文章

  1. Unity - 性能优化 - 包体,内存 - 偏静态资源的优化
  2. electron-vue获取电脑设备标识信息
  3. Caused by: java.lang.NoClassDefFoundError: org/apache/curator/shaded/com/google/common/collect/Maps
  4. 张俊林:由ChatGPT反思大语言模型(LLM)的技术精要
  5. java实现小说阅读器(功能:查看全文、统计总行数/总页码数、查找指定行、指定页码、实现翻页)
  6. python——操作剪贴板,删除文本中的空格
  7. C++基础:[enter] Ctrl+Z [enter] 问题及\n输入输出问题
  8. 很不错的两款Bootstrap Icon图标选择组件
  9. AutoJs学习-录屏功能
  10. 论文解读:SentiPrompt: Sentiment Knowledge Enhanced Prompt-Tuning for Aspect-Based Sentiment Analysis