首页 > 移动开发 > android 常用到的 listview ,scrollview 等上拉刷新

android 常用到的 listview ,scrollview 等上拉刷新

直接上代码。

其实主要就是通过继承  OnScrollListener 这个接口  在 onScrollStateChanged 这个方法里面 判断listview是否到最后1条。

然后加载数据,下面部分代码。

 

[java]
  1. public class MainActivity extends Activity implements OnScrollListener {
  2.     private ArrayAdapter   adapter;
  3.     private ListView listView;
  4.     private TextView loadText;
  5.     private ProgressBar pg;
  6.     private List<String> list;
  7.     // ListView底部View
  8.     private View moreView;
  9.     private Handler handler = new Handler();
  10.     private int MaxNum = 22;// 设置一个最大的数据条数,超过即不再加载
  11.     // 最后可见条目的索引
  12.     private int lastVisibleIndex;
  13.     @Override
  14.     public void onCreate(Bundle savedInstanceState) {
  15.         super.onCreate(savedInstanceState);
  16.         setContentView(R.layout.activity_main);
  17.         listView = (ListView) findViewById(R.id.ll);
  18.         moreView = getLayoutInflater().inflate(R.layout.moredata, null);
  19.         loadText = (TextView) moreView.findViewById(R.id.bt_load);
  20.         pg = (ProgressBar) moreView.findViewById(R.id.pg);
  21.         listView.addFooterView(moreView);
  22.         // 用map来装载数据,初始化10条数据
  23.         list = new ArrayList<String>();
  24.         // 实例化SimpleAdapter
  25.         adapter=  new ArrayAdapter(this, R.layout.item,  R.id.tv_title, list);
  26.         listView.setAdapter(adapter);
  27.         listView.setOnScrollListener(this);
  28.         loadDate();
  29.         /**  手动加载    **/
  30. //        loadText.setOnClickListener(new OnClickListener() {
  31. //            @Override
  32. //            public void onClick(View v) {
  33. //                pg.setVisibility(View.VISIBLE);// 将进度条可见
  34. //                loadText.setVisibility(View.GONE);// 按钮不可见
  35. //                handler.postDelayed(new Runnable() {
  36. //                    @Override
  37. //                    public void run() {
  38. //                        loadDate();
  39. //                        loadText.setVisibility(View.VISIBLE);
  40. //                        pg.setVisibility(View.GONE);
  41. //                        adapter.notifyDataSetChanged();// 通知listView刷新数据
  42. //                    }
  43. //                }, 2000);
  44. //            }
  45. //        });
  46.     }
  47.     /** 说明一下
  48.      * onScroll              是滑动后触发的
  49.      * onScrollStateChanged  是拖着滑动触发
  50.      * */
  51.     @Override
  52.     public void onScroll(AbsListView view, int firstVisibleItem,
  53.             int visibleItemCount, int totalItemCount) {
  54.         // 计算最后可见条目的索引
  55.         lastVisibleIndex = firstVisibleItem + visibleItemCount - 1;
  56.         // 所有的条目已经和最大条数相等,则移除底部的View
  57.         if (totalItemCount == MaxNum + 1) {
  58.             listView.removeFooterView(moreView);
  59.             Toast.makeText(this, "数据全部加载完成", Toast.LENGTH_LONG).show();
  60.         }
  61.     }
  62.     //滑动的时候判断是否已经到了底部。
  63.     @Override
  64.     public void onScrollStateChanged(AbsListView view, int scrollState) {
  65.         //OnScrollListener.SCROLL_STATE_TOUCH_SCROLL
  66.         //OnScrollListener.SCROLL_STATE_FLING
  67.         //OnScrollListener.SCROLL_STATE_IDLE
  68.         if (scrollState == OnScrollListener.SCROLL_STATE_IDLE
  69.                 && lastVisibleIndex == adapter.getCount()) {
  70.             // 当滑到底部时自动加载
  71.              pg.setVisibility(View.VISIBLE);
  72.              loadText.setVisibility(View.GONE);
  73.              handler.postDelayed(new Runnable() {
  74.                  @Override
  75.                  public void run() {
  76.                          loadDate();
  77.                          loadText.setVisibility(View.VISIBLE);
  78.                          pg.setVisibility(View.GONE);
  79.                          adapter.notifyDataSetChanged();
  80.                      }
  81.               }, 2000);
  82.         }
  83.     }
  84.     //这里加载数据
  85.     private void loadDate(){
  86.             int count = adapter.getCount();
  87. //          if (count + 5 < MaxNum) {
  88. //              for (int i = count; i < count + 5; i++) {
  89. //                  list.add("新增第" + i + "行");
  90. //              }
  91. //          } else {
  92. //              for (int i = count; i < MaxNum; i++) {
  93. //                  list.add("新增第" + i + "行");
  94. //              }
  95. //          }
  96.             //一次加载10条
  97.             for (int i = count; i < count + 20; i++) {
  98.                 list.add("新增第" + i + "行");
  99.             }
  100.         }
  101.     }

几个工程:

 

1. 上面那个简单的 上拉加载更多的例子

http://download.csdn.net/detail/kongbaidepao/6884945

 

2. 网上的一个 上拉加载更多   下拉刷新的例子

http://download.csdn.net/detail/kongbaidepao/6884933

 

3. 还有1个挺完善的  listview scrollview  gridview 加载更多的例子

http://download.csdn.net/detail/kongbaidepao/6884999

 

另外附一个开源项目,有兴趣的可以去看看呢。

https://github.com/chrisbanes/Android-PullToRefresh


本文固定链接: http://www.devba.com/index.php/archives/4666.html | 开发吧

报歉!评论已关闭.