zoukankan      html  css  js  c++  java
  • BaseAdapter教程(2) BaseAdapter的notifyDataSetChanged动态刷新

    遇到了这麽一个需求,ListView滑到最底,然后会自动在底部加入新的Cell,实现动态刷新。

    1. 首先,为ListView加上setOnScrollListener。

            lvHomePostItem.setOnScrollListener(new AbsListView.OnScrollListener() {
                private Integer scrollState;
                @Override
                public void onScrollStateChanged(AbsListView view, int scrollState) {
                    this.scrollState = scrollState;
                    switch (scrollState) {
                        // Not scrolling
                        case AbsListView.OnScrollListener.SCROLL_STATE_IDLE:
                            // go to last cell
                            if (view.getLastVisiblePosition() == (view.getCount() - 1) && totalAmountOfLvItem <= 20 ) {
                                addData();
                            }
                            break;
                    }
                }
    
                @Override
                public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {}
            });

    2. addData()是调用了notifyDataSetChanged。而notifyDataSetChanged是回调ListView来刷新UI,实现动态刷新。

        private Integer totalAmountOfLvItem = 0;
        private Integer getExtraNumberOfPost = 2;
        private String getHotPostByCursor;
        private String getPostResult;
        private List<PostDTO> postExtraDTOs = new ArrayList<PostDTO>();
        private ArrayList<Bitmap> bitExtraMaps = new ArrayList<Bitmap>();
        private void addData() {
            popupLoadingWindow();
    
            // Network thread
            new Thread(new Runnable() {
                @Override
                public void run() {
    
                    totalAmountOfLvItem = postAdapter.getCount();
    
                    // clear list
                    if ( !postExtraDTOs.isEmpty()) {
                        postExtraDTOs.clear();
                    }
    
                    if ( !bitExtraMaps.isEmpty()) {
                        bitExtraMaps.clear();
                    }
    
                    // get extra post
                    getHotPostByCursor = Configuration.getHotPostByCursor(totalAmountOfLvItem, getExtraNumberOfPost);
                    getPostResult = okhttp.getResponse(getHotPostByCursor);
                    postExtraDTOs = gsonTools.getPost(getPostResult);
                    totalAmountOfLvItem += getExtraNumberOfPost;
    
                    // get extra bitmap
                    for ( int i = 0; i < postExtraDTOs.size(); i++ ) {
                        Bitmap temp = bitMap.returnBitMap(postExtraDTOs.get(i).getAbstractImg());
                        bitExtraMaps.add(temp);
                    }
    
                    // UI thread
                    getActivity().runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
    
                            // set extra post & bitmap into ListView Data
                            for ( int i = 0; i < postExtraDTOs.size(); i++ ) {
                                postHotDTOs.add(postExtraDTOs.get(i));
                                bitHotMaps.add(bitExtraMaps.get(i));
                            }
    
                            postAdapter.notifyDataSetChanged();
                            lvHomePostItem.setSelection(postAdapter.getCount()-1);
    
                            dismissPopupLoadingWindow();
                        }
                    });
    
                }
            }).start();
        }

    就这样实现动态刷新。

  • 相关阅读:
    【写一个自己的js库】 5.添加修改样式的方法
    【写一个自己的js库】 4.完善跨浏览器事件操作
    js跑马灯效果
    jquery hover延时
    chart
    【写一个自己的js库】 3.添加几个处理字符串的方法
    【写一个自己的js库】 2.实现自己的调试日志
    django踩坑记录
    单元测试框架unittest-3
    单元测试框架unittest-2
  • 原文地址:https://www.cnblogs.com/chenkuang/p/8127920.html
Copyright © 2011-2022 走看看