`
wiseideal
  • 浏览: 449804 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

ListView滑动获取分页 并异步加载每一项的图片

 
阅读更多

项目有一个需求就是从服务器获取一个分页数据,数据按json数组的方式解析出来,每个对象有一个图片url,需要异步进行加载。

所以有两个大的功能点:

1.列表滑动到底时自动获取下一页的数据

2.每个item的图片文件通过异步的方式加载


网上参考了许多做自动分页功能的,都是采用onscrollListener,但是我试用了以后感觉效果并不好。所以决定换一个方法,也是我为了共享自己这点心得而写这篇博客的动力。

我的实现方式是在底部加一个footview,footview是个progressbar 带有一个正在加载的提示信息



大致说下我的文件结构




 


FootView顾名思义,就是我这里做滑动分页的功臣,具体做法也很简单,考虑的是一旦footview滑入屏幕会触发哪些函数,最后选择了onlayout,不同于scrolllistener,这里滑出再不会被误判了。敲定触发请求分页的事件了。

剩下的就是请求并更新数据了,我的做法是使用监听器模式,在Footview中设置一个请求分页的接口,activity中实现他,监听到请求分页的事件再做数据请求并通知adapter进行更新。

以上就是我做滑动分页的心得,代码在底部放出。


接下来就是异步加载图片数据了,其实类似的文章有很多,我没有仔细研究每一个案例,在我做异步加载的时候也碰到了一个问题。

我的实现方式是每一个item开启一个asynctask,这也是我问题的开始。我做过一个测试,加载不到30条数据,结果创建了接近130个asynctask 报错退出。我的代码如下

IconAsyncTask iconTask = new IconAsyncTask(holder.icon, alist.get(position));
			iconTask.execute(new ApkFile[]{alist.get(position)});

 肯定不能这样没节制的创建,一定需要一些约束条件。于是我想到了

if(alist.get(position).getIconResource() == null){
			IconAsyncTask iconTask = new IconAsyncTask(holder.icon, alist.get(position));
			iconTask.execute(new ApkFile[]{alist.get(position)});
		}else{
			holder.icon.setImageBitmap(alist.get(position).getIconResource());
		}

 
 这样,即使同一个item可能会刷多次(原因后面说),但对应list的数据如果判断不过,那么就不会重复创建asynctask了,问题解决。


刷新多次其实也是个很头疼的问题,感觉还必须这么做。

@Override
		protected void onPostExecute(Bitmap result) {
			// TODO Auto-generated method stub
			super.onPostExecute(result);
			if(result != null){
				MyLog.d("getImage");
				apkFile.setIconResource(result);
				iconView.setImageBitmap(result);
				notifyDataSetChanged();
			}
		}

 

如果大家有好的方法也请不吝赐教

 

  • 大小: 26 KB
  • 大小: 22.4 KB
2
3
分享到:
评论

相关推荐

    Android开发之listview优化+图片异步加载缓存+避免图片显示闪烁

    1.4 **计算准确的高度**:如果每个列表项高度固定,可以通过`ListView.setDividerHeight(0)`和`ListView.measureHeightOfChildren()`提前计算并设置,减少滚动时的测量过程。 1.5 **避免过度绘制**:检查并优化布局...

    android ListView滑动分页加载和点击分页加载,以及复用convertView综合案例

    综上所述,Android ListView的滑动分页加载和点击分页加载是提升用户体验的重要手段,而convertView的复用机制则是优化性能的关键。理解并熟练掌握这些技术,对于开发高效、流畅的Android应用至关重要。在实际项目中...

    android Listview下拉刷新 上拉(滑动分页)加载更多

    1. 手动实现:监听ListView的滚动事件,当用户滚动到最后一项时,加载更多数据: ```java listView.setOnScrollListener(new AbsListView.OnScrollListener() { @Override public void onScrollStateChanged...

    listview组件异步加载获取图片并添加下拉刷新上拉更多功能

    本示例主要讨论如何实现ListView组件的异步加载图片以及结合下拉刷新和上拉更多的功能,这些都是提高用户体验的关键特性。 首先,让我们详细了解一下`ListView`的异步加载。在处理大量图片时,直接在主线程加载会...

    android listview滑动到底部加载数据

    "android listview滑动到底部加载数据"这个主题涉及到一个常见的功能需求:无限滚动或称为“上拉加载更多”。这种设计模式允许用户在滚动到ListView底部时动态加载更多的内容,从而提供更好的用户体验,避免一次性...

    listview滚动实现异步加载

    例如,当一个ImageView被添加到可视区域时,异步加载库会开始下载图片并显示,而在图片下载过程中,用户可以继续滚动ListView。 3. **滚动条监听** 要实现在ListView滚动到底部时自动加载更多数据,我们需要监听...

    ListView滑动控件(一)(修正版)

    在“ListView滑动控件(一)(修正版)”中,我们将重点关注如何实现这些功能并优化用户体验。 首先,让我们理解滑动控件的基本原理。滑动效果通常通过监听ListView的滚动事件来实现,通过对子视图进行动画处理,...

    listview实现动态加载

    - 为了解决ListView滑动时频繁创建和销毁View导致性能问题,开发者常使用ViewHolder模式。ViewHolder保存了列表项中的各个子View引用,减少findViewById的调用,提高性能。 4. **动态加载原理**: - 动态加载通常...

    Android ListView分页功能源码

    在ListView分页加载中,我们通常会结合PagerAdapter或FragmentPagerAdapter来创建一个滑动页面的效果,这样用户可以逐页浏览内容,而不是一次性看到所有数据。这两种适配器用于在ViewPager中管理页面,与ListView...

    知识共享-Android之ListView滑动加载、软缓存、懒加载(雷惊风)

    以上是对"知识共享-Android之ListView滑动加载、软缓存、懒加载"这一主题的详细解释,希望对你理解Android开发中的这些重要概念有所帮助。在实际开发中,熟练掌握这些技巧能够显著提升应用的性能和用户体验。

    android滑动SQLite分页加载

    总结来说,Android结合SQLite实现滑动分页加载,需要理解SQLite的基础操作,掌握RecyclerView或ListView的滚动监听,合理设置分页参数,并考虑性能优化。通过这样的方式,可以构建一个高效、流畅的数据加载体验。

    ListView滑动加载

    ListView滑动加载是一种常见的Android应用开发中的数据展示技术,它允许用户在滚动到列表底部时自动加载更多数据,实现无尽滚动的效果。这种功能在处理大量数据时特别有用,例如在社交媒体、新闻阅读或者电商应用中...

    listView异步加载

    通常在ListView滑动到底部时加载下一批数据,而在顶部则可以刷新数据。 5. **缓存机制**:为了减少网络请求,可以采用内存缓存和本地存储(如SQLite数据库、SharedPreferences或文件系统)来暂存已加载的数据。当...

    安卓Android源码——Listview分页加载数据.zip

    当用户滚动到列表底部时,触发加载更多事件,通过网络请求或本地数据库获取新数据,并更新Adapter的数据集,再调用`notifyDataSetChanged()`方法刷新ListView。 4. **Adapter的使用**:Adapter是连接数据源和...

    listview 分页,tablehost 实现,滑动手势

    当用户滚动到页面末尾时,通过监听器`OnScrollListener`的`onScrollStateChanged()`方法判断是否达到加载下一页的条件,然后异步加载新的数据并插入到ListView中。这种方式可以显著提高用户体验,因为只有用户查看的...

    Fragment+ListView下拉加载上拉刷新

    7. **优化性能**:为了提高性能,可以使用ViewHolder模式减少视图的创建,同时对ListView进行分页加载,避免一次性加载大量数据导致内存问题。 8. **处理状态**:XListView提供了不同的状态显示,如刷新中、加载中...

    ListView上拉加载下拉刷新升级版:滑动tabHost结合listView数据刷新

    同时,使用异步加载或分页加载策略,避免一次性加载过多数据导致卡顿。 5. **用户体验**:合理设计动画和提示信息,使用户清楚何时可以进行刷新和加载操作,以及当前操作的状态(如加载中、已完成等)。 总的来说...

    Android应用源码动态ListView,支持异步更新列表,异步更新图片.zip

    - 在ListView中加载图片是性能瓶颈,特别是当图片数量大或者图片尺寸未优化时。为了解决这个问题,通常使用异步加载库,如Picasso、Glide或Universal Image Loader。 - 这些库可以自动在后台线程下载图片,然后在...

    ListView底部加载更多demo

    `getCount()`返回ListView的总项数,`getItem()`和`getItemId()`返回对应位置的数据,`getView()`则负责生成并填充每一项的视图。 接着,我们需要监听ListView的滚动事件。通过在Activity或Fragment中添加...

    Listview自动下拉刷新,自动滑动加载更多数据列表

    它允许用户滚动查看多个行项目,每个行项目通常代表一个数据项。"Listview自动下拉刷新,自动滑动加载更多数据列表"这个主题涉及到两个关键特性:下拉刷新(Pull-to-Refresh)和上拉加载更多(Infinite Scrolling)...

Global site tag (gtag.js) - Google Analytics