zoukankan      html  css  js  c++  java
  • listvew加载更多

    http://bbs.51cto.com/thread-968277-1.html

    又是新的一周的开始,上午自己写了上拉加载更多数据的demo,嘿嘿这里和大家分享。
       android开发中,listview是最常用的控件之一,通常我们可以再微博、微信等很多应用里面都可以看到下拉刷新,以及上拉刷新,点击查看更多等功能。这里介绍下说下上拉刷新。
      上拉刷新其实和底部的“点击加载更多”的功能差不多。都是分页加载数据的一个实现。具体是去监听滚动条事件,下拉到底部时进行操作。
    这里直接上代码

    复制内容到剪贴板
    代码:
    package com.xzw.demo;

    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;

    import android.os.Bundle;
    import android.os.Handler;
    import android.app.Activity;
    import android.util.Log;
    import android.view.Menu;
    import android.view.View;
    import android.widget.AbsListView;
    import android.widget.AbsListView.OnScrollListener;
    import android.widget.ListView;
    import android.widget.SimpleAdapter;
    import android.widget.Toast;

    public class MainActivity extends Activity implements OnScrollListener {
            
            private static final String TAG = "MainActivity";
            
            private ListView listView;
            private View moreView; //加载更多页面
            
            private SimpleAdapter adapter;
            private ArrayList<HashMap<String, String>> listData;
            
            private int lastItem;
        private int count;
         
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            
            listView = (ListView)findViewById(R.id.listView);
            moreView = getLayoutInflater().inflate(R.layout.load, null);
            listData = new ArrayList<HashMap<String,String>>();
            
            prepareData(); //准备数据
            count = listData.size();
         
            adapter = new SimpleAdapter(this, listData,R.layout.item, 
                            new String[]{"itemText"}, new int[]{R.id.itemText});
            
            listView.addFooterView(moreView); //添加底部view,一定要在setAdapter之前添加,否则会报错。
            
            listView.setAdapter(adapter); //设置adapter
            listView.setOnScrollListener(this); //设置listview的滚动事件
        }

        private void prepareData(){  //准备数据
                for(int i=0;i<10;i++){
                        HashMap<String, String> map = new HashMap<String, String>();
                        map.put("itemText", "测试数据"+i);
                        listData.add(map);
                }
                
        }
        
        private void loadMoreData(){ //加载更多数据
                 count = adapter.getCount(); 
                for(int i=count;i<count+5;i++){
                        HashMap<String, String> map = new HashMap<String, String>();
                        map.put("itemText", "测试数据"+i);
                        listData.add(map);
                }
                count = listData.size();
        }

            @Override
            public void onScroll(AbsListView view, int firstVisibleItem,
                            int visibleItemCount, int totalItemCount) {
                    
                    Log.i(TAG, "firstVisibleItem="+firstVisibleItem+" visibleItemCount="+
                                    visibleItemCount+" totalItemCount"+totalItemCount);
                    
                    lastItem = firstVisibleItem + visibleItemCount - 1;  //减1是因为上面加了个addFooterView
                    
            }

            @Override
            public void onScrollStateChanged(AbsListView view, int scrollState) { 
                    Log.i(TAG, "scrollState="+scrollState);
                    //下拉到空闲是,且最后一个item的数等于数据的总数时,进行更新
                    if(lastItem == count  && scrollState == this.SCROLL_STATE_IDLE){ 
                            Log.i(TAG, "拉到最底部");
                            moreView.setVisibility(view.VISIBLE);
                     
                        mHandler.sendEmptyMessage(0);
                             
                    }
                    
            }
            //声明Handler
            private Handler mHandler = new Handler(){
                    public void handleMessage(android.os.Message msg) {
                            switch (msg.what) {
                            case 0:
                                 
                                    try {
                                            Thread.sleep(3000);
                                    } catch (InterruptedException e) {
                                            // TODO Auto-generated catch block
                                            e.printStackTrace();
                                    }
                                loadMoreData();  //加载更多数据,这里可以使用异步加载
                                adapter.notifyDataSetChanged();
                                moreView.setVisibility(View.GONE); 
                                
                                if(count > 30){
                                        Toast.makeText(MainActivity.this, "木有更多数据!", 3000).show();
                                      listView.removeFooterView(moreView); //移除底部视图
                                }
                                    Log.i(TAG, "加载更多数据");
                                    break;
                case 1:
                                    
                                    break;
                            default:
                                    break;
                            }
                    };
            };
        
    }


      以上就是核心的代码,下载:  listdemo.zip (689.73 KB) 。
    效果图:
         




        具体就是这样了,很简单吧。
        能力有限,请大家多多指教。一起交流学习。

  • 相关阅读:
    Nginx模块fastcgi_cache的几个注意点 转
    CGI与FastCGI 转
    APUE--UNIX环境编程
    与 在记事本中的内容表现方式 原创
    Linux 内核使用的 GNU C 扩展
    GCC内嵌汇编
    linux下64位汇编的系统调用系列
    查看源码Vim+Cscope
    GCC 编绎选项 转
    Linux系统启动流程 图解
  • 原文地址:https://www.cnblogs.com/daishuguang/p/3716664.html
Copyright © 2011-2022 走看看