listview分页

来源:互联网 发布:nginx tcp 反向代理 编辑:程序博客网 时间:2024/05/16 15:39
package com.bwei.listviewloadmore;import java.util.ArrayList;import java.util.HashMap;import android.app.Activity;import android.os.Bundle;import android.os.Handler;import android.view.View;import android.view.View.OnClickListener;import android.widget.AbsListView;import android.widget.AbsListView.OnScrollListener;import android.widget.Button;import android.widget.ListView;import android.widget.ProgressBar;import android.widget.SimpleAdapter;import android.widget.Toast;public class MainActivity extends Activity implements OnScrollListener { // ListView的Adapter      private SimpleAdapter mSimpleAdapter;      private ListView lv;      private Button bt;      private ProgressBar pg;      private ArrayList<HashMap<String,String>> list;      // ListView底部View      private View moreView;      private Handler handler;      // 设置一个最大的数据条数,超过即不再加载      private int MaxDateNum;      // 最后可见条目的索引      private int lastVisibleIndex;  @Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main); MaxDateNum = 22; // 设置最大数据条数            lv = (ListView) findViewById(R.id.lv);            // 实例化底部布局          moreView = getLayoutInflater().inflate(R.layout.moredata, null);            bt = (Button) moreView.findViewById(R.id.bt_load);          pg = (ProgressBar) moreView.findViewById(R.id.pg);          handler = new Handler();            // 用map来装载数据,初始化10条数据          list = new ArrayList<HashMap<String,String>>();          for (int i = 0; i < 10; i++) {              HashMap<String, String> map = new HashMap<String, String>();              map.put("ItemTitle", "第" + i + "行标题");              map.put("ItemText", "第" + i + "行内容");              list.add(map);          }          // 实例化SimpleAdapter          mSimpleAdapter = new SimpleAdapter(this, list, R.layout.item,                  new String[] { "ItemTitle", "ItemText" },                  new int[] { R.id.tv_title, R.id.tv_content });          // 加上底部View,注意要放在setAdapter方法前          lv.addFooterView(moreView);          lv.setAdapter(mSimpleAdapter);          // 绑定监听器          lv.setOnScrollListener(this);            bt.setOnClickListener(new View.OnClickListener() {                @Override              public void onClick(View v) {                  pg.setVisibility(View.VISIBLE);// 将进度条可见                  bt.setVisibility(View.GONE);// 按钮不可见                    handler.postDelayed(new Runnable() {                        @Override                      public void run() {                          loadMoreDate();// 加载更多数据                          bt.setVisibility(View.VISIBLE);                          pg.setVisibility(View.GONE);                          mSimpleAdapter.notifyDataSetChanged();// 通知listView刷新数据                      }                    }, 2000);              }          });  } private void loadMoreDate() {          int count = mSimpleAdapter.getCount();          if (count + 5 < MaxDateNum) {              // 每次加载5条              for (int i = count; i < count + 5; i++) {                  HashMap<String, String> map = new HashMap<String, String>();                  map.put("ItemTitle", "新增第" + i + "行标题");                  map.put("ItemText", "新增第" + i + "行内容");                  list.add(map);              }          } else {              // 数据已经不足5条              for (int i = count; i < MaxDateNum; i++) {                  HashMap<String, String> map = new HashMap<String, String>();                  map.put("ItemTitle", "新增第" + i + "行标题");                  map.put("ItemText", "新增第" + i + "行内容");                  list.add(map);              }          }        }        @Override      public void onScroll(AbsListView view, int firstVisibleItem,              int visibleItemCount, int totalItemCount) {          // 计算最后可见条目的索引          lastVisibleIndex = firstVisibleItem + visibleItemCount - 1;            // 所有的条目已经和最大条数相等,则移除底部的View          if (totalItemCount == MaxDateNum + 1) {            // lv.removeFooterView(moreView);  会报错            Toast.makeText(this, "数据全部加载完成,没有更多数据!", Toast.LENGTH_LONG).show();          }        }        @Override      public void onScrollStateChanged(AbsListView view, int scrollState) {          // 滑到底部后自动加载,判断listview已经停止滚动并且最后可视的条目等于adapter的条目          if (scrollState == OnScrollListener.SCROLL_STATE_IDLE                  && lastVisibleIndex == mSimpleAdapter.getCount()) {              // 当滑到底部时自动加载               pg.setVisibility(View.VISIBLE);               bt.setVisibility(View.GONE);               handler.postDelayed(new Runnable() {                             @Override               public void run() {               loadMoreDate();               bt.setVisibility(View.VISIBLE);               pg.setVisibility(View.GONE);               mSimpleAdapter.notifyDataSetChanged();               }                             }, 2000);            }        }  }

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 在厕所里肉妈咪第一章 儿子你不能这样啊国语17分钟 不行 我们不能这样 征服护士妈全文目录34章 迷糊故意穿超短裙坐公交 大妈咪女教师全集 雪白短裙教师妈咪风雨夜 母亲轮陷公交 客厅弄醒穿花裙子午睡的妈 沙发午睡花裙子在线资源 公交上的妈咪 儿子你要高就快点你国语 花裙子母亲午睡 儿子你不能这样啊国语高清 被要求穿超级短的超短裙 穿花裙子躺在沙发上 客厅弄醒午睡的妈连接 家庭毋HH伦s线视频中字 客厅弄硬午睡的儿子短文 客厅搞午睡的母亲 弄醒客厅午睡的母亲在线播放 弄醒午睡的妈视频连接 在客厅睡的午的母亲电影 客厅午睡的母亲在线下载 韩国午睡弄醒午睡的妈 在客厅弄醒午睡的 客厅午睡的母亲穿裙子在线播放 客厅午睡的母亲自拍 客厅里硬搞午睡的母亲视频 对白搞硬沙发午睡的儿子 客厅沙发儿子碎花裙 电影客厅午睡的母亲 客厅午睡以为你是爸爸 客厅弄醒午唾的儿子 客厅搞硬午睡的儿子小说 客厅弄醒穿花裙子午睡的妈电影 在客厅里弄醒午睡的儿子 中午弄醒正在午睡中的护校小 客厅弄醒午睡的妈视频完整迅雷 弄醒客厅午睡花裙子母亲 对白弄醒午睡的儿子