主界面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. LinuxMint下tty.js的安装指南

    1.简介 tty.js是使用Node.js开发的开源Web-based SSH.通过浏览器即可远程访问shell. 关于Web-based SSH的介绍参考https://en.wikipedia.o ...

  2. level 6 - unit4 - 强调句

    强调句 强调实义动词 范围: 一般现在时/一般过去式:肯定句 方法:v.前面加do/does/did 例子: i love you --> i do love you i loved you - ...

  3. BarTender表单的人性化设计—分组框

    BarTender 2016已经支持用户输入信息.从相同位置查询数据库和筛选数据记录,那就是数据输入表单了.这个功能相信迎合了很多用户的需求,主要作用体现在打印时数据输入. 对于表单的设计,不同的客户 ...

  4. win7 、2008 提示Error 1606 Could Not Access Network Location %SystemDrive%/inetpub/wwwroot/ 的错误解决方法

    在安装控件过程中出现提示Error 1606 Could Not Access Network Location %SystemDrive%/inetpub/wwwroot/ 的错误解决方法 1. 点 ...

  5. [MySQL] 01- Basic sql

    准备 一.配置 1. 登录:mysql -u root -p  2. phpMyAdmin创建数据库,并导入.sql文件. 3. 支持中文:set names utf8; 二.面试题 参考:面试宝典- ...

  6. Window系统、主函数和窗体函数这三者之间的关系

    理解Window系统.主窗体.窗体函数这三者之间的关系,对于编写Windows程序十分重要. 主函数和窗体函数都是由Windows系统来调用的函数.仅仅只是主函数是程序启动之后.系统首先调用的函数: ...

  7. mysql的in查询分析

    群里山楂大仙和电台大神探讨到mysql的in查询的问题,问题如下: student表有class_id的索引,但是只查询一个的时候用索引,查两个就不用索引了 这是很奇怪的现象,我试了一下也是这样,真是 ...

  8. C语言对文件的基本操作

    在C语言中,对于文件的操作是利用FILE结构体进行的. 几个常用的操作文件函数简介 1:打开文件 FILE *fopen( const char *filename, const char *mode ...

  9. HttpClinet学习笔记

    本文为学习httpClient学习过程中转载的文章,若涉及版权请留言. ----------------------------- 前言 超文本传输协议(HTTP)也许是当今互联网上使用的最重要的协议 ...

  10. 用JAVA发送一个XML格式的HTTP请求

    import java.io.BufferedInputStream; import java.io.BufferedReader; import java.io.ByteArrayOutputStr ...