Android Listview滑动时不加载数据 停止时加载数据

Android Listview滑动时不加载数据 停止时加载数据,第1张

概述本文实例为大家分享了Listview滑动时不加载数据停止时加载数据的具体代码,供大家参考,具体内容如下

本文实例为大家分享了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);

效果

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程小技巧。

总结

以上是内存溢出为你收集整理的Android Listview滑动时不加载数据 停止时加载数据全部内容,希望文章能够帮你解决Android Listview滑动时不加载数据 停止时加载数据所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1146693.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存