下拉刷新加载聊天记录出现的问题以及解决方法
来源:互联网 发布:加工中心宏程序编程 编辑:程序博客网 时间:2024/05/18 21:09
最近在写一个聊天的安卓app,用的开源框架是openfire,这个框架还是非常强大的.但是在处理下拉加载聊天记录的时候,还是出现了一些问题。
1,如果使用ASC排序,刷新之前会显示最久的那几条消息,刷新到最后才显示最新消息。使用DESC排序,那么刷新之前最新的聊天会显示在顶部,越往下刷新越会显示越久的消息。这两种方法始终达不到qq聊天的那种效果,后来查了很多资料,也尝试了很多方法,终于得到了解决。
private int chatPosition = 0;//聊天显示的位置
private int end = 5;//每页显示的聊天个数
/** * 设置聊天的Adapter */private void setChatWindowAdapter() { String selection = ChatProvider.ChatConstants.JID + " = ?"; String[] selectionArgs = {jid}; String orderBy = "_id asc limit (select count(*) from chat)" + (-end) + "," + "(select count(*) from chat)"; new AsyncQueryHandler(mContentResolver) { @Override protected void onQueryComplete(int token, Object cookie, Cursor cursor) { ListAdapter adapter = new ChatAdapter(ChatActivity.this, cursor, PROJECTION_FROM); lv_chat.setAdapter(adapter); lv_chat.setSelection(adapter.getCount() - chatPosition); } }.startQuery(0, null, ChatProvider.CONTENT_URI, PROJECTION_FROM, selection, selectionArgs, orderBy);}
*关键是这一句orderBy,它用来处理查询的排序条件,使用ASC排序并且默认显示聊天的个数减去每一页的显示个数到最后的那个聊天个数
,每刷新一次就改变显示的个数,这样就可以达到显示的效果,但是这样刷新,刷新之后会跳到最新条聊天。
2.刷新之后跳到之前消息的位置。
lv_chat.setSelection(adapter.getCount() - chatPosition);这一句代码listview可以跳转到指定位置,再看一看下拉刷新:lv_chat.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ListView>() { @Override public void onPullDownToRefresh(PullToRefreshBase<ListView> refreshView) {//下滑// Toast.makeText(ChatActivity.this, "加载聊天", 0).show(); end += Constant.CHAT_NUM; chatPosition += Constant.CHAT_NUM; Log.d("mmd", end + ""); Log.d("hhh", chatPosition + ""); setChatWindowAdapter(); flag++; new FinishRefresh().execute(); } class FinishRefresh extends AsyncTask<Void, Void, Void> { @Override protected Void doInBackground(Void... params) { return null; } @Override protected void onPostExecute(Void result) { lv_chat.onRefreshComplete(); } } @Override public void onPullUpToRefresh(PullToRefreshBase<ListView> refreshView) {//上滑 } }); }这样处理之后就可以实现聊天,下拉刷新加载历史记录了。
0 0
- 下拉刷新加载聊天记录出现的问题以及解决方法
- iOS聊天下拉刷新聊天记录的实现
- //XML的pull解析 以及上拉加载下拉刷新
- mui 双webview的上拉加载和下拉刷新和poppicker一起时候使用的问题以及解决
- 下拉刷新以及上拉加载更多
- android listview 下拉刷新以及加载更多
- pulltorefresh上拉加载以及下拉刷新
- PullToRefreshListView的下拉刷新上拉加载更多问题
- iScroll上拉加载下拉刷新 -> 遇到的问题
- 补充上拉刷新下拉加载的url问题
- RecyclerView的基本用法,下拉刷新下拉加载以及item的增删
- 下拉刷新和下拉加载的原理
- XListView的下拉刷新下拉加载
- webpack 的热加载问题 以及解决方法
- 使用AFN出现的问题以及解决方法
- 下拉刷新/下拉加载
- 下拉刷新 下拉加载
- 下拉加载、下拉刷新
- 3-15笔记 待整理 Handler AsyncTask
- 【TC 695_600】BearPasswordAny(模拟)
- Codeforces 698A. Vacations (简单DP)
- 自定义ListView下拉刷新上拉加载更多功能
- 【杭电oj】1207 - 汉诺塔II(打表,动态规划)
- 下拉刷新加载聊天记录出现的问题以及解决方法
- JVM环境参数配置
- svn cleanup failed–previous operation has not finished; run cleanup if it was interrupted
- Android N7.0多窗口适配开发指导
- UVA 10790-How Many Points of Intersection?#
- WebSphere MQ 入门指南
- Pykd——Python extension for WinDbg
- nginx.conf详解
- @PathVariable和@RequestParam的区别,理解 @PathVariable 、@RequestHeader、@CookieValue、@RequestParam, @Request