实例效果:

后台逻辑:

package com.hsj.example.paginationloadnetdatademo02;import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.SystemClock;
import android.support.v7.app.AppCompatActivity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AbsListView;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;import com.hsj.example.paginationloadnetdatademo02.com.hsj.domain.Movie;
import com.hsj.example.paginationloadnetdatademo02.com.hsj.utils.Utils;import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.List;public class MainActivity extends AppCompatActivity {private ListView listView_movies;private MyAdapter adapter;private String path;private int pageNo=1;private int pageSize=20;//总数据源private List<Movie> data=new ArrayList<>();// 存放最后一个可见条目的索引值private int lastVisibleItem;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);this.listView_movies= (ListView) this.findViewById(R.id.listView_movies);View footerView=View.inflate(this,R.layout.footer_view,null);this.listView_movies.addFooterView(footerView);this.listView_movies.setOnScrollListener(new AbsListView.OnScrollListener() {@Overridepublic void onScrollStateChanged(AbsListView view, int scrollState) {if(lastVisibleItem==adapter.getCount() && scrollState== AbsListView.OnScrollListener.SCROLL_STATE_IDLE){pageNo++;try {path = "https://movie.douban.com/j/search_subjects?type=movie&tag="+ URLEncoder.encode("热门","utf-8")+"&sort=recommend&page_limit="+pageSize+"&page_start="+(pageNo-1)*pageSize;} catch (UnsupportedEncodingException e) {e.printStackTrace();}new LoadNetDataAsyncTask().execute(path);}}@Overridepublic void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {lastVisibleItem=firstVisibleItem+visibleItemCount-1;}});try {path = "https://movie.douban.com/j/search_subjects?type=movie&tag="+ URLEncoder.encode("热门","utf-8")+"&sort=recommend&page_limit="+pageSize+"&page_start="+(pageNo-1)*pageSize;new LoadNetDataAsyncTask().execute(path);} catch (UnsupportedEncodingException e) {e.printStackTrace();}}private final class LoadNetDataAsyncTask extends AsyncTask<String,Void,List<Movie>>{@Overrideprotected List<Movie> doInBackground(String... params) {try {InputStream inputStream=Utils.getInputStreamByPath(params[0]);if(inputStream!=null){String json=Utils.getStringByInputStream(inputStream);SystemClock.sleep(3000);return  Utils.getListMovies(json);}} catch (Exception e) {e.printStackTrace();}return null;}@Overrideprotected void onPostExecute(List<Movie> movies) {if(movies!=null){//将当前页的数据添加到大集合中data.addAll(movies);if(adapter==null){adapter=new MyAdapter(data);listView_movies.setAdapter(adapter);}else{//更新界面adapter.notifyDataSetChanged();}}}}private final class MyAdapter extends BaseAdapter{private List<Movie> movies;private LayoutInflater layoutInflater;private ViewHolder viewHolder=null;public MyAdapter(List<Movie> movies) {this.movies=movies;layoutInflater=LayoutInflater.from(MainActivity.this);}@Overridepublic int getCount() {return movies.size();}@Overridepublic Object getItem(int position) {return movies.get(position);}@Overridepublic long getItemId(int position) {return position;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {Movie movie= movies.get(position);final String cover=movie.getCover();if(convertView==null){viewHolder=new ViewHolder();//将布局文件转换成View 对象convertView=layoutInflater.inflate(R.layout.movie_item,null);viewHolder.imageView_cover= (ImageView) convertView.findViewById(R.id.imageView_cover);viewHolder.textView_title= (TextView) convertView.findViewById(R.id.textView_title);convertView.setTag(viewHolder);}else{viewHolder= (ViewHolder) convertView.getTag();}viewHolder.imageView_cover.setTag(cover);class LoadImageAsyncTask extends AsyncTask<String,Void,Bitmap>{@Overrideprotected Bitmap doInBackground(String... params) {try {InputStream inputStream=Utils.getInputStreamByPath(params[0]);if(inputStream!=null){return BitmapFactory.decodeStream(inputStream);}} catch (Exception e) {e.printStackTrace();}return null;}@Overrideprotected void onPostExecute(Bitmap bitmap) {if(bitmap!=null){Object localUrl=viewHolder.imageView_cover.getTag();if(localUrl!=null && cover.equals(localUrl)){viewHolder.imageView_cover.setImageBitmap(bitmap);}}}}new LoadImageAsyncTask().execute(cover);viewHolder.textView_title.setText(movie.getTitle());return convertView;}}class ViewHolder{ImageView imageView_cover;TextView textView_title;}
}

前台展示:

<1>一个movie_item展示

<2>一个footer_view展示

<3>一个activity_xml的展示

android 之ListView总结(一个综合实例)相关推荐

  1. 一步一步学Silverlight 2系列(18):综合实例之RSS阅读器

    概述 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, ...

  2. (18):Silverlight 2 综合实例之RSS阅读器

    概述 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, ...

  3. 零基础HTML入门教程(23)--HTML综合实例

    点此查看 所有教程.项目.源码导航 本文目录 1. 背景 2. 开发流程 2.1 网站功能设计 2.2 建立网站目录结构 2.3 开发首页 2.2 生平简介页 2.3 经典诗词页 2.4 苏轼图集页 ...

  4. c# Windows窗体应用程序设计综合实例-------小游戏设计

    c# Windows窗体应用程序设计综合实例(一)匹配游戏设计 上次的计时器运行效果图如下: = --------------------------------------------------- ...

  5. android单选控件spinner与数据库结合综合实例

    本示例说明: 1.实现单选按钮与后台数据绑定,通过Id绑定. 2.实现显示时默认选中项控制. 3.实现修改后保存,根据id保存. 4.数据库处理使用AHibernate1.1,详见: http://b ...

  6. Android学习笔记 2.5.3 实例——使用SimpleAdapter创建ListView 2.5.4 自动完成文本框(AutoCompleteTextView)的功能与用法

    Android学习笔记 疯狂Android讲义 文章目录 Android学习笔记 疯狂Android讲义 第2章 Android 应用的界面编程 2.5 第4组 UI组件:AdapterView及其子 ...

  7. android 全选功能,Android实现ListView控件的多选和全选功能实例

    本文实例讲述了Android实现ListView控件的多选和全选功能.分享给大家供大家参考,具体如下: 主程序代码 MainActivity.Java package yy.test; import ...

  8. android 表格listview,通过Layout_weight用ListView来实现一个表格

    通过前面的分析,我们知道,如果想要按照权重比例来分配LinearLayout,我们需要将其宽度设置为0dip,如果我们将其宽度设置为"fill_parent"的时候,其控件所占的比 ...

  9. Android Studio ListView框架+优化安卓应用市场实例

    直接使用ListView的基本步骤 获取数据 创建适配器 绑定适配器 需要实现重写的函数: getCount() 获取数据长度 getItem (int position) 获取项资源 getItem ...

最新文章

  1. python 仪表盘-跟小白学Python数据分析——绘制仪表盘
  2. Hibernate 基本配置文件+基本增删改查
  3. 理解oauth2.0【转载】
  4. 旋转矩阵中6保6_40岁阿姨发明新型手推车,可以360度旋转,干活效率提升6倍
  5. python读取excel送到网页_python+selenium excel中文读取填充到网页
  6. 互联网新人最热门去处:前三名毫无意外!
  7. 5.从Paxos到Zookeeper分布式一致性原理与实践---使用ZooKeeper
  8. 拓端tecdat|R语言随机波动率(SV)模型、MCMC的Metropolis-Hastings算法金融应用:预测标准普尔SP500指数
  9. 点击按钮复制到剪切板
  10. JVM上篇学习3--内存与垃圾回收
  11. 盘点论文免费下载的国内外网站
  12. 聚焦新零售 阿里云重磅推出零售云 1
  13. OSChina 周五乱弹 —— 夏目不想上班,还想要甜甜的恋爱
  14. MATLAB机器学习进阶
  15. 基于函数回调方法对qsort()进行修改,使用冒泡排序实现对不同类型数据的排序
  16. 深入理解Video标签
  17. 圆形体癣是什么样子的图片_癣是什么样子的图片及皮肤癣症状
  18. Agfa的MUSICA说明
  19. Unity-可编辑的星星特效
  20. springboot启动报jar包加载异常问题解决

热门文章

  1. LTE轻松进阶之帧结构
  2. 好好学python · 元组
  3. 2.6 datetime 模块
  4. Linux系统中的防火墙的实现:iptables/netfilter
  5. Java中,内部类的概述和内部类的访问特点和内部类的分类(内部类的位置)
  6. magent实现memcached集群的一个问题
  7. iptables白名单配置
  8. Sublime Text 3 全套快捷键及功能介绍
  9. PAT甲级1038 Recover the Smallest Number (30 分):[C++题解]贪心、排列成最小的数、字符串
  10. java调用oracle删除,使用IDEA对Oracle数据库进行简单增删改查操作