Android ListView加载更多
先看效果:
ListView的footer布局:
- <?xml version="1.0" encoding="utf-8"?>
- <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:paddingBottom="10dp"
- android:paddingTop="10dp" >
- <TextView
- android:id="@+id/pulldown_footer_text"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_centerInParent="true"
- android:text="加载更多日志"
- android:textSize="15dp" />
- <ProgressBar
- android:id="@+id/pulldown_footer_loading"
- style="@android:style/Widget.ProgressBar.Small.Inverse"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_centerVertical="true"
- android:layout_marginLeft="20dp"/>
- </RelativeLayout>
ListView的item和main_activity布局很简单,分别是一个TextView和ListView,不再贴出。
MainActivity代码贴出:
- import java.util.ArrayList;
- import java.util.List;
- import android.app.Activity;
- import android.os.Bundle;
- import android.view.LayoutInflater;
- import android.view.View;
- import android.view.ViewGroup;
- import android.widget.AbsListView.OnScrollListener;
- import android.widget.AbsListView;
- import android.widget.BaseAdapter;
- import android.widget.ListView;
- import android.widget.RelativeLayout;
- import android.widget.TextView;
- import android.widget.Toast;
- public class MainActivity extends Activity
- {
- private ListView listview;
- private LayoutInflater inflater;
- private List<String> arrays = new ArrayList<String>();
- private RelativeLayout footer;
- private MyAdapter adapter;
- // 每页显示条数
- private Integer perpage = 20;
- // 当前页数
- private Integer currentpage = 1;
- // 最大页数
- private Integer maxpage = 1;
- @Override
- public void onCreate(Bundle savedInstanceState)
- {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- setMaxPage(40);
- loadData(currentpage, perpage);
- inflater = getLayoutInflater();
- listview = (ListView) this.findViewById(R.id.pulldownview);
- footer = (RelativeLayout) View.inflate(getApplicationContext(), R.layout.pulldown_footer, null);
- listview.addFooterView(footer, null, true);
- adapter = new MyAdapter();
- listview.setAdapter(adapter);
- listview.setOnScrollListener(new OnScrollListener()
- {
- @Override
- public void onScrollStateChanged(AbsListView view, int scrollState)
- {
- if (view.getLastVisiblePosition() == view.getCount() - 1)
- {
- if (currentpage != maxpage)
- {
- currentpage++;
- loadData(currentpage, perpage);
- adapter.notifyDataSetChanged();
- } else
- {
- Toast.makeText(getApplicationContext(), "没有更多的数据!", Toast.LENGTH_SHORT).show();
- listview.removeFooterView(footer);
- }
- }
- }
- @Override
- public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount)
- {
- }
- });
- }
- /**
- * 模拟分页查询数据
- *
- * @param currentpage当前页数
- * @param perpage
- * 每页显示数
- */
- private void loadData(Integer currentpage, Integer perpage)
- {
- // 起始数据
- Integer firstResult = (currentpage - 1) * perpage;
- // 获取的最大数据
- Integer maxResult = currentpage * perpage;
- System.out.println("firstResult:"+firstResult+" "+"maxResult:"+maxResult);
- // select * from database where XXXX order by XX limit firstResult,maxResult //order by可省略,但有order by时limit必需在它后面
- for (; firstResult < maxResult; firstResult++)
- {
- arrays.add("这是测试数据" + (firstResult+1));
- }
- }
- /**
- * 模拟获取最大页数
- *
- * @param total
- * 总的数据
- */
- private void setMaxPage(Integer total)
- {
- if (total % perpage == 0)
- {
- maxpage = total / perpage;
- } else
- {
- maxpage = total / perpage + 1;
- }
- System.out.println("maxpage:"+maxpage);
- }
- private class MyAdapter extends BaseAdapter
- {
- @Override
- public int getCount()
- {
- return arrays == null ? 0 : arrays.size();
- }
- @Override
- public Object getItem(int position)
- {
- return null;
- }
- @Override
- public long getItemId(int position)
- {
- return 0;
- }
- @Override
- public View getView(int position, View convertView, ViewGroup parent)
- {
- ViewHolder holder;
- if (convertView == null)
- {
- holder = new ViewHolder();
- convertView = inflater.inflate(R.layout.item_list, null);
- holder.textView = (TextView) convertView.findViewById(R.id.text);
- convertView.setTag(holder);
- } else
- {
- holder = (ViewHolder) convertView.getTag();
- }
- holder.textView.setText(arrays.get(position));
- return convertView;
- }
- }
- private static class ViewHolder
- {
- TextView textView;
- }
- }
Android ListView加载更多的更多相关文章
- ListView 加载更多列表 Load More mono forandroid 项目笔记
今天项目经理找我说Listview加载更多的时候会出现一些问题,主要表现在会顿一下.让我我就去找Java的方法看看.自己写出了mono 的加载更多功能.和大家分享一下 先看效果 首先是模型类ListI ...
- Listview 加载更多
JQM Listview 加载更多 demo - Warren的个人主页 JQM Listview 加载更多 Demo 测试数据1 测试数据2 测试数据3 测试数据4 显示更多 Page Footer ...
- android ListView加载不同布局
今天来跟大家讨论下同一个ListView如何加载不同的布局. 老规矩,先来看效果图. 主要步骤如下 1.增加Type. 2.重写getViewTypeCount方法. 3.重写getItemViewT ...
- android listview 加载图片错乱(错位)
写道 今天晚上一个朋友介绍我看了一篇文章,也是解决android中listview在加载图片错位的问题,看了之后,感觉写的很好,自己也遇到这个问题,但是又不知道从何下手,看到这篇文章后,我的问题 ...
- 【转】Android ListView加载不同的item布局
原创教程,转载请保留出处:http://www.eoeandroid.com/thread-72369-1-1.html 最近有需求需要在listView中载入不同的listItem布局,开始 ...
- android listview 加载遇到的问题
http://blog.csdn.net/l_serein/article/details/7706338 转载: 描述一下场景: 菜单栏上有若干分类,点击每一个分类,ListView下分根据分类显示 ...
- Listview加载更多是,恢复到原来的位置,如果不加特殊处理,总是跳转第一条
1.记录listView滚动到的位置的坐标,然后利用listView.scrollTo精确的进行恢复 listView.setOnScrollListener(new OnScrollListener ...
- ListView实现Item上下拖动交换位置 并且实现下拉刷新 上拉加载更多
ListView实现Item上下拖动交换位置 并且实现下拉刷新 上拉加载更多 package com.example.ListViewDragItem; import android.app.Ac ...
- ListView下拉刷新上拉加载更多实现
这篇文章将带大家了解listview下拉刷新和上拉加载更多的实现过程,先看效果(注:图片中listview中的阴影可以加上属性android:fadingEdge="none"去掉 ...
随机推荐
- SublimeText2 快捷键一览表
SublimeText2 快捷键一览表 Sublime Text比起Notepad++,UltraEdit之类Code编辑器来说,其功能有过之而无不及,配合着各种插件使用,Sublime Text在实 ...
- ROWID伪列
ROWID伪列概念: 在数据表中每一行所保存的记录,oracle会为每条记录分配一个唯一的地址编号,这个编号就是通过ROWID表示的. 所有的数据都利用ROWID进行定位. 观察rowid的存在 SQ ...
- sublime 3 安装go环境
安装go环境是在go已经安装的情况下, 1 首先安装 Package Control ctrl + · 打开sublime 命令行模式 复制粘贴以下代码 import urllib.request,o ...
- php: 不能嵌套try-catch-fnally,否则执行时间过长
php不能try-catch-fnally里面在嵌套try-catch-fnall,否则本来执行时间不长的程序,会被执行更长时间,这是php的bug吗? 如: try{ 代码块 }catch (\Ex ...
- [官方软件] Easy Sysprep v4.3.29.602 【系统封装部署利器】(2016.01.22)--skyfree大神
[官方软件] Easy Sysprep v4.3.29.602 [系统封装部署利器](2016.01.22) Skyfree 发表于 2016-1-22 13:55:55 https://www.it ...
- jquery获得option的值和对option进行操作
Query获取Select元素,并选择的Text和Value: $("#select_id").change(function(){//code...}); //为Select添加 ...
- AX2012 multiple enum values as query filter选择多个枚举值当过滤条件
classDeclaration { QueryBuildRange qbrLocationType; } datasource.init() { super(); qbrLocationType = ...
- LabVIEW之生产者/消费者模式--队列操作 彭会锋
LabVIEW之生产者/消费者模式--队列操作 彭会锋 本文章主要是对学习LabVIEW之生产者/消费者模式的学习笔记,其中涉及到同步控制技术-队列.事件.状态机.生产者-消费者模式,这几种技术在在本 ...
- 前端优化之图片延迟加载(lazyload.js)
要想缩短首屏加载时间,思路一般是减少http请求次数和降低每次的请求量.本文中使用现成的lazyload.js插件,文末会放出下载地址. lazyload.js可以实现图片分批次加载,不是一次性加载完 ...
- C# 反射浅析
反射是一个运行库类型发现的过程.通过反射可以得到一个给定程序集所包含的所有类型的列表,这个列表包括给定类型中定义的方法.字段.属性和事件.此外,通过反射也可以动态的发现一组给定类支持的接口.方法的参数 ...