最近几天研究ListView实现分页加载和滚动加载,发现可以用listView的OnScroll方法来实现,直接上代码

ListViewScroll.java

package zy.lucifer.ListViewScroll; import android.app.Activity; import android.os.Bundle; import android.util.Log; import android.view.Gravity; import android.view.View; import android.view.ViewGroup; import android.widget.AbsListView; import android.widget.BaseAdapter; import android.widget.LinearLayout; import android.widget.ListView; import android.widget.ProgressBar; import android.widget.TextView; import android.widget.Toast; import android.widget.AbsListView.OnScrollListener; import android.widget.LinearLayout.LayoutParams; public class ListViewScroll extends Activity { /** Called when the activity is first created. */ private LayoutParams mLayoutParams = new LinearLayout.LayoutParams( LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT); /** * 设置布局显示目标最大化属性 */ private LayoutParams FFlayoutParams = new LinearLayout.LayoutParams( LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.FILL_PARENT); ListView listView ; private int lastItem = 0; LinearLayout loadingLayout; private listViewAdapter adapter; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); listView = (ListView) findViewById(R.id.myList); Log.i("test", "onCreate(Bundle savedInstanceState)>>>>>>>>>>>>>>>"); // 线性布局 LinearLayout layout = new LinearLayout(this); // 设置布局 水平方向 layout.setOrientation(LinearLayout.HORIZONTAL); // 进度条 ProgressBar progressBar = new ProgressBar(this); // 进度条显示位置 progressBar.setPadding(0, 0, 15, 0); // 把进度条加入到layout中 layout.addView(progressBar, mLayoutParams); // 文本内容 TextView textView = new TextView(this); textView.setText("加载中..."); textView.setGravity(Gravity.CENTER_VERTICAL); // 把文本加入到layout中 layout.addView(textView, FFlayoutParams); // 设置layout的重力方向,即对齐方式是 layout.setGravity(Gravity.CENTER); // 设置ListView的页脚layout loadingLayout = new LinearLayout(this); loadingLayout.addView(layout, mLayoutParams); loadingLayout.setGravity(Gravity.CENTER); listView.addFooterView(loadingLayout); adapter = new listViewAdapter(); listView.setAdapter(adapter); listView.setOnScrollListener(new OnScrollListener() { @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { // TODO Auto-generated method stub Log.i("test" , "Scroll>>>first: " + firstVisibleItem + ", visible: " + visibleItemCount + ", total: " + totalItemCount); lastItem = firstVisibleItem + visibleItemCount - 1; Log.i("test" , "Scroll>>>lastItem:" + lastItem); //显示50条ListItem,即0-49,因为onScroll是在“滑动”执行过之后才触发,所以用adapter.count<=41作条件 int scrolllength=101; if (adapter.count<=scrolllength) { if (firstVisibleItem+visibleItemCount==totalItemCount) { adapter.count += 10; adapter.notifyDataSetChanged(); listView.setSelection(lastItem); int currentPage=adapter.count/10; Toast.makeText(getApplicationContext(), "第"+currentPage+"页", Toast.LENGTH_LONG).show(); } } else { listView.removeFooterView(loadingLayout); } } @Override public void onScrollStateChanged(AbsListView view, int scrollState) { // TODO Auto-generated method stub } }); } class listViewAdapter extends BaseAdapter { int count = 10; /* starting amount */ public int getCount() { return count; } public Object getItem(int pos) { return pos; } public long getItemId(int pos) { return pos; } public View getView(int pos, View v, ViewGroup p) { Log.i("test", "getView>>>pos:" + pos); TextView view; if (v == null) { view = new TextView(ListViewScroll.this); } else { view = (TextView) v; } view.setText("ListItem " + pos); view.setTextSize(20f); view.setGravity(Gravity.CENTER); view.setHeight(60); return view; } } }

main.xml

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <ListView android:cacheColorHint="#00000000" android:id="@+id/myList" android:layout_width="fill_parent" android:layout_height="fill_parent" > </ListView> </LinearLayout>

效果图如下

由于是本地的内容,所以看不到下面的转圈圈的等待,如果做耗时操作,例如下载图片什么的,则可以实现

enjoy~!

本文由csdn博主曾阳出品 地址http://blog.csdn.net/Zengyangtech/archive/2011/03/17/6255554.aspx

转载请注明

更多相关文章

  1. 为什么要学习 Markdown?究竟有什么用?
  2. Android实现ListView数据动态加载的方法
  3. android上传文件到服务器(图片、文本等)
  4. Android自定义进度条-带文本(文字进度)的水平进度条(ProgressBar
  5. Android利用ProGuard混淆代码
  6. android添加快捷方式
  7. Android弹出菜单的灵活运用(自定义AlertDialog)
  8. Android(安卓)TableLayout
  9. android 下拉状态栏(SystemUI)常见修改记录

随机推荐

  1. MySql索引的优缺点
  2. [转]swoole安装报错详解 mysqlnd_find_ch
  3. 我需要介绍MongoDB / NoSQL数据库
  4. MySQL数据库辅助类
  5. Php数据库为GoJs格式化json
  6. MySql新建连接不能运行以及如何导入sql
  7. MySQL定时检查是否宕机并邮件通知
  8. MYSQL使用Select插入,如果选择返回多于1的
  9. cpanel导入大数据库(mysql)的方法
  10. mysql数据库中查看当前使用的数据库是哪