欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

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);

效果

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

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