主界面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. UNIX环境编程学习笔记(23)——信号处理初步学习

    lienhua342014-10-29 1 信号的概念 维基百科中关于信号的描述是这样的: 在计算机科学中,信号(英语:Signals)是 Unix.类 Unix 以及其他 POSIX 兼容的操作系统 ...

  2. symfony分页实现方法

    1.symfony分页是要用到组件的,所以这里使用KnpPaginatorBundle实现翻页 2. 用composer下载 在命令行中:  composer require "knplab ...

  3. windows下WAMP php5.x redis扩展

    其解压到php的扩展目录ext下,在php.ini文件中扩展部分增加一行:extension=php_redis.dll 新增下载地下: php5.3 http://download.csdn.net ...

  4. golang-defer坑的本质

    https://blog.csdn.net/hittata/article/details/77836435

  5. 第五种方式,python使用组合来添加类方法和属性(二),以selenium的webdriver为例

    组合优点多,但经常比继承需要额外的代码. 上一篇是 介绍装饰器.继承.元类.mixin,四种給类动态添加类属性和方法的四种方式. 此篇介绍直接把被组合的类的属性直接加入到类里面,前面的四个例子很简单, ...

  6. SQLServer转MYSQL的方法(连数据)[传]

    转自 https://blog.csdn.net/AlbenXie/article/details/77449720 SQLServer转MYSQL的方法(连数据) 本次转换需要依赖使用工具Navic ...

  7. ios开发之--仿购物类详情页面数量添加小功能

    话不多说先上图:

  8. openssl & openssh

    什么是OpenSSL众多的密码算法.公钥基础设施标准以及SSL协议,或许这些有趣的功能会让你产生实现所有这些算法和标准的想法.果真如此,在对你表示敬佩的同时,还是忍不住提醒你:这是一个令人望而生畏的过 ...

  9. 【代码审计】EasySNS_V1.6远程图片本地化导致Getshell

    0x00 环境准备 EasySNS官网:http://www.imzaker.com 网站源码版本:EasySNS极简社区V1.60 程序源码下载:http://es.imzaker.com/inde ...

  10. [转]linux下释放文件内存

    在Linux系统下,我们一般不需要去释放内存,因为系统已经将内存管理的很好.但是凡事也有例外,有的时候内存会被缓存占用掉,导致系统使用SWAP空间影响性能,此时就需要执行释放内存(清理缓存)的操作了. ...