主界面MainActivity.class
public class MainActivity extends Activity implements OnScrollListener{
private ProgressBar loadInfo;
private ListView listView;
private LinearLayout loadLayout;
private ArrayList<string> items;
private DatabaseService service;
private int currentPage = 1; //默认在第一页
private static final int lineSize =10; //每次显示数
private int allRecorders = 0; //全部记录数
private int pageSize = 1; //默认共一页
private Aleph0 baseAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView = (ListView) findViewById(R.id.listview);
service = new DatabaseService(this);
//创建一个角标线性布局用来显示正在加载
loadLayout = new LinearLayout(this);
loadLayout.setGravity(Gravity.CENTER);
//定义一个ProgressBar表示“正在加载”
loadInfo = new ProgressBar(this,null,android.R.attr.progressBarStyleSmall);
//增加组件
loadLayout.addView(loadInfo, new LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT));
//增加到listView头部
listView.addHeaderView(loadLayout);
listView.setOnScrollListener(this); showAllData(); } /**
* 读取全部数据
*/
public void showAllData(){ allRecorders = service.getCount();
//计算总页数
pageSize = (allRecorders + lineSize -1) / lineSize;
items = service.getAllItems(currentPage, lineSize);
Collections.reverse(items); //倒序
baseAdapter = new Aleph0();
listView.setAdapter(baseAdapter);
listView.setSelection(items.size());//直接定位到最底部
}
int firstItem=-1; @Override
public void onScroll(AbsListView absView, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
firstItem=firstVisibleItem;
}
@Override
public void onScrollStateChanged(AbsListView view, int scorllState) {
if (firstItem==0&& currentPage < pageSize&& scorllState == OnScrollListener.SCROLL_STATE_IDLE) {// 不再滚动
Log.e(log, 滑到第一位);
currentPage++;
// 增加数据
appendDate();
}
} /**
* 增加数据
*/
private void appendDate(){
final ArrayList<string> additems = service.getAllItems(currentPage, lineSize);
Collections.reverse(additems);
baseAdapter.setCount(baseAdapter.getCount() + additems.size());
//判断,如果到了最末尾则去掉“正在加载”
if(allRecorders == baseAdapter.getCount()){
listView.removeHeaderView(loadLayout);
}
items.addAll(0, additems); baseAdapter.notifyDataSetChanged();
listView.setSelection(additems.size()); } class Aleph0 extends BaseAdapter {
int count = lineSize; public int getCount() {
return count;
} public void setCount(int count){
this.count = count;
} public Object getItem(int pos) {
return pos;
} public long getItemId(int pos) {
return pos;
} public View getView(int pos, View v, ViewGroup p) {
TextView view = new TextView(MainActivity.this);
view.setTextSize(60);
if(items != null){
view.setText(items.get(pos));
}else{
view.setText(pos);
}
return view;
}
} }
    /**
* 刷新视图 *
*/
public void setList(List<ChatMode.RecentLetter> bcData) {
Collections.reverse(bcData);
this.listMsg = bcData;
notifyDataSetInvalidated();
lv.setSelection(bcData.size()); } /**
* 加载更多 *
*/
public void addList(final List<ChatMode.RecentLetter> newMsgData) {
if (this.listMsg != null) {
Collections.reverse(newMsgData);
this.listMsg.addAll(0, newMsgData);
notifyDataSetChanged();
lv.setSelection(newMsgData.size() + 1);
} else {
setList(newMsgData);
}
}

2,主界面布局文件activity_main.xml

<linearlayout android:layout_height="fill_parent" android:layout_width="fill_parent" android:orientation="vertical" xmlns:android="http://schemas.android.com/apk/res/android">

    <listview android:id="@+id/listview" android:layout_height="fill_parent" android:layout_width="fill_parent">

</listview></linearlayout>
 

4,效果图 

仿QQ、微信翻页查看聊天记录的更多相关文章

  1. Android 仿QQ微信开场导航以及登陆界面

    相信大家对于微信等社交应用的UI界面已经都很熟悉了,该UI最值得借鉴的莫过于第一次使用的时候一些列产品介绍的图片,可以左右滑动浏览,最后进入应 用,这一效果适用于多种项目中,相信今后开发应用一定会用得 ...

  2. Android仿QQ微信开场导航以及登陆界面

    相信大家对于微信等社交应用的UI界面已经都很熟悉了,该UI最值得借鉴的莫过于第一次使用的时候一些列产品介绍的图片,可以左右滑动浏览,最后 进入应用,这一效果适用于多种项目中,相信今后开发应用一定会用得 ...

  3. vue滚动+滑动删除标记(移动端)仿qq/微信

    安装组件 "vue-touch": "^2.0.0-beta.4", main.js引入 import VueTouch from 'vue-touch' Vu ...

  4. iOS天气动画、高仿QQ菜单、放京东APP、高仿微信、推送消息等源码

    iOS精选源码 TYCyclePagerView iOS上的一个无限循环轮播图组件 iOS高仿微信完整项目源码 想要更简单的推送消息,看本文就对了 ScrollView嵌套ScrolloView解决方 ...

  5. Qt编写数据库通用翻页demo(开源)

    在Qt与数据库结合编程的过程中,记录一多,基本上都需要用到翻页查看记录,翻页有个好处就是可以减轻显示数据的表格的压力,不需要一次性将数据库表的记录全部显示,也基本上没有谁在一页上需要一次性显示所有记录 ...

  6. Android UI【android 仿微信、QQ聊天,带表情,可翻页,带翻页拖动缓冲】

    http://blog.csdn.net/lnb333666/article/details/8546497 如题,这是公司项目的一个功能模块,先上个效果图: 其次大致说说原理: 1,首先判断输入的字 ...

  7. 【转】android 欢迎界面翻页成效,仿微信第一次登陆介绍翻页界面

    android 欢迎界面翻页效果,仿微信第一次登陆介绍翻页界面 本实例做的相对比较简单主要是对翻页控件的使用,有时候想要做一些功能是主要是先了解下是否有现成的控件可以使用,做起来比较简单不用费太大的劲 ...

  8. 自定义 behavior - 完美仿 QQ 浏览器首页,美团商家详情页

    使用CoordinatorLayout打造各种炫酷的效果 自定义Behavior -- 仿知乎,FloatActionButton隐藏与展示 NestedScrolling 机制深入解析 一步步带你读 ...

  9. 仿QQ空间和微信朋友圈,高解耦高复用高灵活

    先看看效果: 用极少的代码实现了 动态详情 及 二级评论 的 数据获取与处理 和 UI显示与交互,并且高解耦.高复用.高灵活. 动态列表界面MomentListFragment支持 下拉刷新与上拉加载 ...

随机推荐

  1. 内存管理 初始化(三)before mm_init()

    看到了mm_init(),期间将从bootmem迁移到伙伴系统,slab分配器也会建立. 在分析mm_init()之前,把setup_arch(&command_line)之后的函数分析了以下 ...

  2. es 5 数组reduce方法记忆

    reduce() 方法接收一个函数作为累加器(accumulator),数组中的每个值(从左到右)开始合并,最终为一个值. 概念:对数组中的所有元素调用指定的回调函数.该回调函数的返回值为累积结果,并 ...

  3. dos 批处理中%cd% 和%~dp0%的区别

    看网上介绍区别,写的好复杂,其实很简单: %cd%  在批处理和命令窗口都能使用.用于打印,当前工作路径. %~dp0% 则只能用于批处理中,用于获得当前批处理文件所在的路径. 做个试验试一下: @e ...

  4. 常用的PostBuild Event 脚本

    参考: http://blog.csdn.net/fengzhijiaxu/article/details/4827364 http://blog.csdn.net/teng_ontheway/art ...

  5. selenium chrome登陆手机 pc淘宝

    接口登录淘宝,困难度极高,没有人已经实现过. 淘宝登录selenium 手机版  pc版. 由于每天需要使用ip代理大批量的异地登录淘宝帐号,这种情况必然会出现淘宝滑动验证码,使用ActionChai ...

  6. 【scala】 scala 基础(一)

    至于什么是scala,摘录一段 维基百科的解释: scala 下载 安装 省略 1.环境变量配置完成后 命令行报错,因为scala 的安装路径里边包含空格 修改后即可.由于我的本地包含空格,此处CLI ...

  7. SQL Server 2008 清空删除日志文件 130G日志 10秒内变10M

    SQL2005: Backup Log DNName with no_log  '这里的DNName是你要收缩的数据库名,自己注意修改下面的数据库名,我就不再注释了. go dump transact ...

  8. Android播放器推荐:可以播放本地音乐、视频、在线播放音乐、视频、网络收音机等

    下载链接:http://www.eoeandroid.com/forum.php?mod=attachment&aid=MTAxNTczfGMyNjNkMzFlfDEzNzY1MzkwNTR8 ...

  9. 计算 md5

    代码从polarssl中扒来的,略作改动,md5.h & md5.cpp 如下 #ifndef POLARSSL_MD5_H #define POLARSSL_MD5_H #include & ...

  10. SSL延迟有多大 (Https)

    据说,Netscape公司当年设计SSL协议的时候,有人提过,将互联网所有链接都变成HTTPs开头的加密链接. 这个建议没有得到采纳,原因之一是HTTPs链接比不加密的HTTP链接慢很多.(另一个原因 ...