`

ListView分页

阅读更多
package hbq.android.myapp.listview;

import android.app.ListActivity;
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 MainActivity extends ListActivity implements OnScrollListener {
	private static final String TAG = "MainActivity";

	private ListViewAdapter adapter = new ListViewAdapter();
	ListView listView;
	private int lastItem = 0;
	LinearLayout loadingLayout;
	/**
	 * 设置布局显示属性
	 */
	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);

	private ProgressBar progressBar;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);

		Log.i(TAG, "onCreate(Bundle savedInstanceState)>>>>>>>>>>>>>>>");
		// 线性布局
		LinearLayout layout = new LinearLayout(this);
		// 设置布局 水平方向
		layout.setOrientation(LinearLayout.HORIZONTAL);
		// 进度条
		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用来显示条目
		listView = getListView();
		// 添加到脚页显示
		listView.addFooterView(loadingLayout);
		// 给ListView添加适配器
		setListAdapter(adapter);
		// 给ListView注册滚动监听
		listView.setOnScrollListener(this);
	}

	@Override
	public void onScroll(AbsListView v, int firstVisibleItem,
			int visibleItemCount, int totalItemCount) {
		Log.i(TAG, "Scroll>>>first: " + firstVisibleItem + ", visible: "
				+ visibleItemCount + ", total: " + totalItemCount);
		lastItem = firstVisibleItem + visibleItemCount - 1;
		Log.i(TAG, "Scroll>>>lastItem:" + lastItem);
		// 显示50条ListItem,即0-49,因为onScroll是在“滑动”执行过之后才触发,所以用adapter.count<=41作条件
		if (adapter.count <= 41) {
			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 v, int state) {
		if (lastItem == adapter.count
				&& state == OnScrollListener.SCROLL_STATE_IDLE) {
			Log.i(TAG, "ScrollStateChanged>>>state:" + state + "lastItem:"
					+ lastItem);
			// 显示50条ListItem,即0-49,因为onScrollStateChanged是在“拖动滑动”执行过之后才触发,所以用adapter.count<=41作条件
			if (adapter.count <= 41) {
				adapter.count += 10;
				adapter.notifyDataSetChanged();
			}

		}
	}

	/**
	 * 要用用于生成显示数据
	 * 
	 */
	class ListViewAdapter extends BaseAdapter {
		int count = 10;

		public int getCount() {
			Log.i(TAG, "getCount>>>count:" + count);
			return count;
		}

		public Object getItem(int pos) {
			Log.i(TAG, "getItem>>>pos:" + pos);
			return pos;
		}

		public long getItemId(int pos) {
			Log.i(TAG, "getItemId>>>ItemId:" + pos);
			return pos;
		}

		public View getView(int pos, View v, ViewGroup p) {
			Log.i(TAG, "getView>>>pos:" + pos);
			TextView view;
			if (v == null) {
				view = new TextView(MainActivity.this);
			} else {
				view = (TextView) v;
			}
			view.setText("ListItem " + pos);
			view.setTextSize(20f);
			view.setGravity(Gravity.CENTER);
			view.setHeight(60);
			return view;
		}
	}
}





package hbq.android.myapp.listview;

import android.app.ListActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.LinearLayout.LayoutParams;

public class ButtonLoadingActivity extends ListActivity {
	private static final String TAG = "ButtonLoadingActivity";

	private ListViewAdapter adapter = new ListViewAdapter();
	private ListView listView;
	/**
	 * 设置布局显示的属性
	 */
	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);

	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		Log.i(TAG, "onCreate(Bundle savedInstanceState)>>>>>>>>>>>>>>>");
		LinearLayout layout = new LinearLayout(this);
		layout.setOrientation(LinearLayout.HORIZONTAL);

		Button button = new Button(this);
		button.setText("点击加载下10条...");
		button.setGravity(Gravity.CENTER_VERTICAL);

		layout.addView(button, FFlayoutParams);
		layout.setGravity(Gravity.CENTER);
		LinearLayout loadingLayout = new LinearLayout(this);
		loadingLayout.addView(layout, mLayoutParams);
		loadingLayout.setGravity(Gravity.CENTER);

		listView = getListView();

		listView.addFooterView(loadingLayout);

		button.setOnClickListener(new Button.OnClickListener() {
			@Override
			public void onClick(View v) {
				adapter.count += 10;
				Log.i(TAG, "setOnClickListener:" + adapter.count);
				adapter.notifyDataSetChanged();
				int currentPage = adapter.count / 10;
				Toast.makeText(getApplicationContext(),
						"第" + currentPage + "页", Toast.LENGTH_LONG).show();
			}
		});

		setListAdapter(adapter);
	}

	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(TAG, "getView>>>pos:" + pos);
			TextView view;
			if (v == null) {
				view = new TextView(ButtonLoadingActivity.this);
			} else {
				view = (TextView) v;
			}
			view.setText("ListItem " + pos);
			view.setTextSize(20f);
			view.setGravity(Gravity.CENTER);
			view.setHeight(60);
			return view;
		}
	}

}






转自:http://yangguangfu.iteye.com/blog/832809
  • 大小: 21.6 KB
  • 大小: 18.8 KB
分享到:
评论
2 楼 fliex 2011-12-07  
刚好要学习这个东西,感谢分享
1 楼 mwei 2011-11-06  
包里文件编码是GBK,以后可以考虑统一使用UTF-8. 谢谢分享

相关推荐

    WPF中ListView分页

    实现ListView分页通常需要以下步骤: 1. **创建数据源**:首先,你需要一个可分页的数据源。这通常是一个包含分页信息的ObservableCollection,如PagedCollectionView或自己实现的分页数据集。 2. **设置View**:...

    android listview分页查询显示

    在这个"android listview分页查询显示"的Demo中,我们将深入探讨如何实现这个功能,以及如何结合SQLite数据库进行数据管理。 首先,ListView的工作原理是通过Adapter来连接数据源和视图。Adapter负责将数据转化为...

    listView分页显示 加载更多

    "ListView分页显示 加载更多"的功能是优化用户体验的重要手段,它允许用户在滚动到列表底部时动态加载更多的数据,而不是一次性加载所有内容,从而节省内存资源并提高应用性能。 在实现ListView分页加载更多功能时...

    Android ListView分页功能源码

    在ListView分页加载中,我们通常会结合PagerAdapter或FragmentPagerAdapter来创建一个滑动页面的效果,这样用户可以逐页浏览内容,而不是一次性看到所有数据。这两种适配器用于在ViewPager中管理页面,与ListView...

    ListView分页显示上一页和下一页

    "ListView分页显示上一页和下一页"这一主题,就是讨论如何实现ListView在用户滚动到列表底部时自动加载下一页数据,同时提供上一页的切换功能。 一、分页原理 分页的基本思想是将大量数据分为多个小部分(页)来...

    Android_ListView分页

    一、ListView分页原理 分页的基本思想是将大量数据分成若干个小部分(每部分称为一页),每次只加载一部分数据到ListView中,当用户滚动到底部时,再加载下一页的数据。这样既能保证界面的流畅性,又能有效利用系统...

    WPF ListView分页实现.doc

    ### WPF ListView分页实现详解 在Windows Presentation Foundation(WPF)中,`ListView`控件是用于展示数据集合的强大工具。当数据集过大时,为了提高应用性能和用户体验,通常会采用分页技术来控制每次加载的数据...

    简单ListView分页Demo

    本示例"简单ListView分页Demo"旨在教你如何实现一个具有分页功能的ListView,以展示不同类型的音乐,如流行音乐和古典音乐,并根据类型显示不同数量的条目。我们将探讨以下几个关键知识点: 1. **ListView基础**: ...

    ListView分页加载及图片缓存显示的实现

    本示例“ListView分页加载及图片缓存显示的实现”着重讲解如何优化ListView的性能,提高用户体验,特别是处理大量图片时。以下是对该主题的详细解释: 1. **ListView分页加载**: 分页加载(Pagination)是一种...

    安卓listview相关相关-Listview分页加载数据.rar

    本压缩包"安卓listview相关相关-Listview分页加载数据.rar"主要关注的是ListView的分页加载数据这一核心特性。 一、ListView基础 1. ListView的基本结构:ListView由多个View(如TextView、ImageView等)组成的...

    Android高级应用源码-Listview分页加载数据.zip

    本资源"Android高级应用源码-Listview分页加载数据.zip"提供了一种高效处理大量数据的方法——分页加载,这对于优化用户体验和节省系统资源至关重要。下面将详细探讨ListView分页加载的核心原理、实现方法以及其在...

    android listview分页加载的demo【源代码】

    在Android开发中,ListView是广泛...以上就是关于“android listview分页加载的demo【源代码】”的详细知识点介绍,通过学习和实践,开发者可以掌握在Android应用中高效展示大量数据的技巧,提升应用的性能和用户体验。

    Android listview分页

    要实现ListView分页,你需要做以下几步: 1. 数据源管理:创建一个适配器(如ArrayAdapter或BaseAdapter),管理当前显示的数据。当需要加载更多数据时,向适配器添加新数据。 2. 监听滚动事件:通过ListView的...

    很简单的WPF ListView分页技术

    WPF ListView如何分页困扰了我很久,百度搜索的结果几乎得不到满意的结果,而CSDN论坛上流传的资源包貌似是微软提供的例子,但是略显复杂。经过笔者一晚上的摸索,得到了一种比较简单的解决方案,在此贡献给大家。...

    Android ListView分页加载(服务端+Android端)Demo

    Android ListView分页加载功能 在实际开发中经常用到,是每个开发者必须掌握的内容,本Demo给出了服务端+Android端的两者的代码,并成功通过了测试。 服务端使用MyEclipse,Android端使用Eclipse。

    简单的listview分页

    本教程主要围绕"简单的listview分页"展开,旨在帮助初学者理解如何实现ListView的顶部或底部拉动加载更多功能,以及Item之间的分离效果。下面将详细介绍这两个关键知识点。 一、ListView分页 1. 分页原理:分页是...

    这是一个ListView分页显示的示例

    本示例"HeaderBottomListDemo"专注于实现ListView的分页加载功能,这在处理大数据集时尤为重要,因为它可以提高应用性能并优化用户体验。分页加载允许用户滚动到列表底部时加载更多数据,而不是一次性加载所有内容,...

    listview分页加载

    ListView的数据分页加载功能是提高用户体验和优化应用性能的关键技术。本篇文章将深入探讨如何在Android中实现ListView的分页加载。 首先,理解分页加载的概念至关重要。分页加载是指在用户滚动列表到底部时,应用...

    使用listview分页显示数据

    本资源提供了一个自定义ListView结合分页功能的实践案例,包括代码实现和数据库操作,对于学习和理解如何在Android应用中实现高效的数据加载和展示具有很高的参考价值。 首先,我们来了解ListView的基础知识。...

Global site tag (gtag.js) - Google Analytics