java多线程listview_Android_listview分页加载更多
只要使用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分页加载更多相关推荐
- php下拉上滑分页,Flutter实现下拉刷新 上拉分页加载更多
一.Flutter实现下拉刷新和上拉分页加载更多 在Flutter官方sdk中给我们提供了下拉刷新的组件RefreshIndicator.但是没有提供上拉分页加载更多的组件.但是在Flutter Li ...
- java h5 上拉加载更多_移动端H5页面上拉加载更多功能实现(二)
之前已经写过一篇关于上拉加载更多的文章,那个主要是根据滚动实现分页向后台发起请求实现.这次实现方式为后台返回所有需要加载的数据,前端这边做视觉上的分页效果.实现原理也是根据滚动距离触发加载更多的条件. ...
- 小程序上拉分页加载更多数据功能
在开发过程序中,触底加载更多时,为了防止一直触底加载,这时我们应该加一个开关来控制. 在data中加一个属性isLoading = false 然后在接口发出请求后将开关打开: this.isLoad ...
- java 多线程数据异步加载图片_JAVA多线程超时加载当网页图片
先上图: 这一次没有采取正则匹配,而采取了最简单的java分割和替代方法进行筛选图片 它能够筛选如下的图片并保存到指定的文件夹 如: "http://xxxx/xxxx/xxx.jpg&qu ...
- php v9 ajax 翻页,phpcms v9建站 ajax列表分页加载更多word文档教程
最新文章 https: open weixin qq com 有这个的账号,给客户开通微信小程序不需要认证费直... https: open weixin qq com 有这个的账号,给客户开通微信小 ...
- 微信小程序实现下拉分页加载更多数据
1.使用scroll-view实现滚动下拉 wxml <scroll-view wx:if="{{plotArr.length > 0}}" scroll-y=&quo ...
- List 分页加载数据控制机制
分页加载是一种应用很广泛的数据展示控制机制,相信绝大多数开发者对于这一套机制都非常熟悉.这篇文章的主要目的结合实际的使用场景,对以往在开发中遇到一些概念进行梳理,归纳的同时加深理解,也希望能帮助更多刚 ...
- 【Vue学习总结】22.使用Mint UI的infinite-scroll实现上拉分页加载
接上篇<21.Vue-UI框架之Mint UI的使用> 上一篇我们讲解了Vue的UI框架Mint UI的使用,本篇我们来通过Mint UI提供的infinite-scroll组件结合api ...
- js页面中实现加载更多功能
js页面中实现加载更多功能 分页-如何实现加载更多功能,目前的在很多网站上使用的加载更多功能中,使用最多的是iscroll.js实现的上拉加载更多.下拉刷新功能.但是iscroll.js本身并没有集成 ...
- Android_ListView上拉加载更多(ListView分页功能)
先上效果图 加载完数据 首先定义一个底部正在加载的布局footer_layout.xml <?xml version="1.0" encoding="utf-8&q ...
最新文章
- 《一个程序猿的生命周期》读后感
- ssh框架点击按钮就404_设置404错误页面的5大关键因素
- Mono 2.0正式发布了
- xml可以html标签吗,自定义html标签(XML)
- [文章备份]RSS阅读器在手机上APP配置方法
- 如何连接到远程SQL Server
- 设计模式 - 观察者模式(Observer Pattern) Java内置 用法
- Apache Beam 剖析
- Leetcode 286.墙与门
- vsftpd+TLS+MySQL
- php ip 短时间 重复,记录服务器端ip,记录这个ip第一次启动文件的时间,并且排除重复的ip...
- java web 和js区别_jsp和javascript之间有什么区别?
- 制作动态微信二维码名片python
- hb运行到微信小程序出现报错:[微信小程序开发者工具] ? Enable IDE Service (y/N) [27D[27C
- 2016年华为优招面试经验
- kibana远端访问配置
- 信号采样频率和信号频率的关系
- PADS画2.54mm排针
- 高分请教:j2ee的例子PetStore中许多类为什么要实现Serializable 接口
- SMM 框架整合 配置文件
热门文章
- python3调用arcpy地理加权回归_多元地理加权回归软件使用和含义
- 第六章 C语言数组_什么是数组?C语言数组的基本概念
- 范成法加工matlab_基于Matlab的渐开线齿轮的范成法仿真 (2)
- Ajax的三种写法(最原始的写法+最常用的写法+最简便的写法)
- word2016 插入书签域
- Django教程(为什么选择Django框架)
- SOLIDWORKS批量转化PDF图纸的方法
- 引入jackson-dataformat-xml的影响
- 用python画箱线图_python绘制箱线图
- 字节跳动面试真题- 整数反转