Android Listview滑动时不加载数据 停止时加载数据
程序员文章站
2023-11-21 10:03:58
本文实例为大家分享了listview滑动时不加载数据 停止时加载数据的具体代码,供大家参考,具体内容如下
数据源配置(adapter)
package com....
本文实例为大家分享了listview滑动时不加载数据 停止时加载数据的具体代码,供大家参考,具体内容如下
数据源配置(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; } @override public int getcount() { return lists!=null?lists.size():0; } @override public object getitem(int position) { return lists.get(position); } @override public long getitemid(int position) { return position; } @override public 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); }
设置监听
ok,我们在看看activity中的代码,主要是监听listview的onscrolllistener方法
@override public 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的name textview 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——url imageloader.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);
效果
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。