只要使用listview,那么listview的异步加载是必不可少的.

我们知道,如果整个手机屏幕只能完整显示10条记录,那么adapter的getView就会调用10次,

也就是说,手机屏幕显示了几条数据,那么getView就会被调用几次...这个例子待会将会演示,注意往回看也是一样的,

也就是listview把以前的显示过的已经被回收了,这样就可以显示更多的条目了.所以这里需要listview优化

public class ArticleListAdapter extends BaseAdapter {

private List mArticles;

private Context mContext;

static View view = null;

public ArticleListAdapter(Context context, List articles) {

this.mArticles = articles;

this.mContext = context;

}

@Override

public int getCount() {

return mArticles.size();

}

@Override

public Object getItem(int position) {

return mArticles.get(position);

}

@Override

public long getItemId(int position) {

return position;

}

@Override

public View getView(int position, View convertView, ViewGroup parent) {System.out.println("我是getView,我被调用了");

if (convertView == null) {

convertView = LayoutInflater.from(mContext).inflate(

R.layout.article_list_item, null);

}

view = convertView;

Article article = mArticles.get(position);

TextView textView = (TextView) view.findViewById(R.id.tv_article_title);

textView.setText(article.getTitle());

return view;

}

}

先上几个例子图片:

现在我们来验证一下关于listview优化的问题.

从上一张图可以看出,显示了6个条目,现在在看看控制台输出情况:

也就是getView被调用了6次,并且当我们不断的把listview往下拉,getView不断的被调用.

也就是显示一次调用一次! 比如第一次调用了6次,那么就创建了6个view对象,

并且getView的convertView参数就是代表老的view对象,

这里我们为了避免重复创建对象可以使用如上的Adapter使用方式,判断convertView是否为空,如果不为空则复用老对象...

现在再来看看listview的异步加载,其实异步加载很简单,我们知道listview肯定会对应一个Adapter,Adapter对应一个集合,

我们只需要改变这个集合即可.比如,第一次加载了10,那么当加载更多的时候,只需要把又加载到的10条记录加到集合即可,

然后再调用adapter.notifyDataSetChanged()方法即可..listview就会在原来的的基础上加载10条,代码如下

这里用的AsyncTask

@Override

protected Object doInBackgroundTask2(String... params) {//在子线程执行

String url = params[0];

Source subSource = getSource(url);

int index = pager * 25;

List articles = articleDao.getArticleByParentIDPage(index,

parent_id);

if (articles != null && articles.size() == 25) {

mSubArticles.addAll(articles);

} else {

if (subSource == null)

return null;

List subElements = subSource

.getAllElementsByClass("leftList").get(1)

.getChildElements().get(0).getChildElements();

int subSize = subElements.size();

for (int i = 0; i < subSize; i++) {

Article sub = new Article();

Element href = subElements.get(i).getFirstElement("a");

String link = href.getAttributeValue("href");

String title = href.getTextExtractor().toString().trim();

sub.setTitle(title);

sub.setLink(link, true);

mSubArticles.add(sub);

// 缓存到本地数据库

if (parent_id != -1) {

sub.setId(parent_id);

articleDao.add(sub);

}

}

}

Element custom = subSource.getAllElementsByClass("custom").get(0);

pager_info = custom.getRenderer().toString();

return custom;

}

@Override

protected void onPostTask2(Object result) {//执行完doInBackgroundTask2后,执行该方法

//pd_tip.setVisibility(View.GONE);

pd.dismiss();

load_more_view.setVisibility(View.VISIBLE);

if (result == null)

return;

load_more.setText(pager_info);

if (adapter != null) {

adapter.notifyDataSetChanged();

}

}

java多线程listview_Android_listview分页加载更多相关推荐

  1. php下拉上滑分页,Flutter实现下拉刷新 上拉分页加载更多

    一.Flutter实现下拉刷新和上拉分页加载更多 在Flutter官方sdk中给我们提供了下拉刷新的组件RefreshIndicator.但是没有提供上拉分页加载更多的组件.但是在Flutter Li ...

  2. java h5 上拉加载更多_移动端H5页面上拉加载更多功能实现(二)

    之前已经写过一篇关于上拉加载更多的文章,那个主要是根据滚动实现分页向后台发起请求实现.这次实现方式为后台返回所有需要加载的数据,前端这边做视觉上的分页效果.实现原理也是根据滚动距离触发加载更多的条件. ...

  3. 小程序上拉分页加载更多数据功能

    在开发过程序中,触底加载更多时,为了防止一直触底加载,这时我们应该加一个开关来控制. 在data中加一个属性isLoading = false 然后在接口发出请求后将开关打开: this.isLoad ...

  4. java 多线程数据异步加载图片_JAVA多线程超时加载当网页图片

    先上图: 这一次没有采取正则匹配,而采取了最简单的java分割和替代方法进行筛选图片 它能够筛选如下的图片并保存到指定的文件夹 如: "http://xxxx/xxxx/xxx.jpg&qu ...

  5. php v9 ajax 翻页,phpcms v9建站 ajax列表分页加载更多word文档教程

    最新文章 https: open weixin qq com 有这个的账号,给客户开通微信小程序不需要认证费直... https: open weixin qq com 有这个的账号,给客户开通微信小 ...

  6. 微信小程序实现下拉分页加载更多数据

    1.使用scroll-view实现滚动下拉 wxml <scroll-view wx:if="{{plotArr.length > 0}}" scroll-y=&quo ...

  7. List 分页加载数据控制机制

    分页加载是一种应用很广泛的数据展示控制机制,相信绝大多数开发者对于这一套机制都非常熟悉.这篇文章的主要目的结合实际的使用场景,对以往在开发中遇到一些概念进行梳理,归纳的同时加深理解,也希望能帮助更多刚 ...

  8. 【Vue学习总结】22.使用Mint UI的infinite-scroll实现上拉分页加载

    接上篇<21.Vue-UI框架之Mint UI的使用> 上一篇我们讲解了Vue的UI框架Mint UI的使用,本篇我们来通过Mint UI提供的infinite-scroll组件结合api ...

  9. js页面中实现加载更多功能

    js页面中实现加载更多功能 分页-如何实现加载更多功能,目前的在很多网站上使用的加载更多功能中,使用最多的是iscroll.js实现的上拉加载更多.下拉刷新功能.但是iscroll.js本身并没有集成 ...

  10. Android_ListView上拉加载更多(ListView分页功能)

    先上效果图 加载完数据 首先定义一个底部正在加载的布局footer_layout.xml <?xml version="1.0" encoding="utf-8&q ...

最新文章

  1. 《一个程序猿的生命周期》读后感
  2. ssh框架点击按钮就404_设置404错误页面的5大关键因素
  3. Mono 2.0正式发布了
  4. xml可以html标签吗,自定义html标签(XML)
  5. [文章备份]RSS阅读器在手机上APP配置方法
  6. 如何连接到远程SQL Server
  7. 设计模式 - 观察者模式(Observer Pattern) Java内置 用法
  8. Apache Beam 剖析
  9. Leetcode 286.墙与门
  10. vsftpd+TLS+MySQL
  11. php ip 短时间 重复,记录服务器端ip,记录这个ip第一次启动文件的时间,并且排除重复的ip...
  12. java web 和js区别_jsp和javascript之间有什么区别?
  13. 制作动态微信二维码名片python
  14. hb运行到微信小程序出现报错:[微信小程序开发者工具] ? Enable IDE Service (y/N) 
  15. 2016年华为优招面试经验
  16. kibana远端访问配置
  17. 信号采样频率和信号频率的关系
  18. PADS画2.54mm排针
  19. 高分请教:j2ee的例子PetStore中许多类为什么要实现Serializable 接口
  20. SMM 框架整合 配置文件

热门文章

  1. python3调用arcpy地理加权回归_多元地理加权回归软件使用和含义
  2. 第六章 C语言数组_什么是数组?C语言数组的基本概念
  3. 范成法加工matlab_基于Matlab的渐开线齿轮的范成法仿真 (2)
  4. Ajax的三种写法(最原始的写法+最常用的写法+最简便的写法)
  5. word2016 插入书签域
  6. Django教程(为什么选择Django框架)
  7. SOLIDWORKS批量转化PDF图纸的方法
  8. 引入jackson-dataformat-xml的影响
  9. 用python画箱线图_python绘制箱线图
  10. 字节跳动面试真题- 整数反转