zoukankan      html  css  js  c++  java
  • 仿QQ、微信翻页查看聊天记录


    主界面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,效果图 

  • 相关阅读:
    机器学习-liuyubobobo(慕课网)
    python进阶 廖雪峰(慕课网)
    ajax 报0错误
    nav破解
    thinkphp5--关于多条件查询的分页处理问题
    JS/JQuery获取当前元素的上一个/下一个兄弟级元素等元素的方法
    linux 批量删除文件
    Linux下which命令使用详解(转)
    thinkphp5和nginx不得不说的故事
    Git基本操作和使用
  • 原文地址:https://www.cnblogs.com/niray/p/4602935.html
Copyright © 2011-2022 走看看