`

ListView分批动态加载Item

阅读更多
这个例子主要实现ListView当滚动完毕所有可见Item后,继续加载未显示item例子,主要通过onScroll的监听来实现:
package com.example.listview;

import android.app.ListActivity;
import android.os.Bundle;
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.AbsListView.OnScrollListener;
import android.widget.LinearLayout.LayoutParams;

public class ListViewLoading extends ListActivity implements OnScrollListener {

	private ProgressBar progressBar;

	private LayoutParams WClayoutParams = 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 ListViewAdapter adapter = new ListViewAdapter();

	class ListViewAdapter extends BaseAdapter {
		int count = 5;

		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) {
			TextView view = new TextView(ListViewLoading.this);
			view.setText("The item position  " + pos);
			view.setTextSize(20f);
			view.setHeight(80);
			return view;
		}
	}

	/** Called when the activity is first created. */
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		LinearLayout layout = new LinearLayout(this);
		layout.setOrientation(LinearLayout.HORIZONTAL);
		progressBar = new ProgressBar(this);
		progressBar.setPadding(0, 0, 15, 0);
		layout.addView(progressBar, WClayoutParams);

		TextView textView = new TextView(this);
		textView.setText("数据加载中...");
		textView.setGravity(Gravity.CENTER_VERTICAL);

		layout.addView(textView, FFlayoutParams);
		layout.setGravity(Gravity.CENTER);

		LinearLayout loadingLayout = new LinearLayout(this);
		loadingLayout.addView(layout, WClayoutParams);
		loadingLayout.setGravity(Gravity.CENTER);

		ListView listView = getListView();
		listView.addFooterView(loadingLayout);
		setListAdapter(adapter);
		listView.setOnScrollListener(this);
		// registerForContextMenu(listView);
	}

	private int lastItem = 0;

	// 每次ListView被滚动时调用
	@Override
	public void onScrollStateChanged(AbsListView view, int scrollState) {
		// TODO Auto-generated method stub
		if (lastItem == adapter.count
				&& scrollState == OnScrollListener.SCROLL_STATE_IDLE) {
			adapter.count += 3;
			adapter.notifyDataSetChanged();
		}
	}

	@Override
	public void onScroll(AbsListView view, int firstVisibleItem,
			int visibleItemCount, int totalItemCount) {
		lastItem = firstVisibleItem + visibleItemCount - 1;
		System.out.println("firstVisibleItem:" + firstVisibleItem);
		System.out.println("visibleItemCount:" + visibleItemCount);
	}
}
分享到:
评论
1 楼 苹果超人 2011-06-14  

相关推荐

    ListView块状滚动条加分批加载数据

    本项目实现了ListView的两个关键特性:块状滚动条(类似微博、QQ微博)和分批加载数据(即无限滚动或下拉加载更多)。下面将详细讲解这两个功能的实现原理及步骤。 **一、ListView自定义滚动条** 1. **创建自定义...

    Android中ListView控件实现数据的异步分批加载

    本文将深入探讨如何在Android中利用ListView实现数据的异步分批加载,以提高用户体验并优化性能。 首先,我们需要理解异步加载的概念。异步加载是指在不阻塞主线程的情况下,后台处理数据加载任务,确保用户界面的...

    C#中ListView控件的虚模式使用方法

    - **分页**:如果数据源支持分页,考虑分批加载数据,以减小内存压力。 通过合理利用ListView的虚模式,你可以显著提升大量数据的显示效率,提供流畅的用户体验。同时,注意适时地调整和优化代码,以适应不同场景下...

    C# 导入Excel文件到ListView和导出ListView到Excel文件

    - **性能优化**: 大文件或大量数据导入/导出时,应考虑分批处理,避免一次性加载所有数据导致内存占用过高。 - **用户交互**: 提供进度指示器或取消功能,提升用户体验。 - **错误处理**: 捕获可能出现的文件读写...

    listview的小demo

    3. 分批加载:如果数据量极大,可以考虑使用Header/Footer来实现分页加载,或者使用下拉刷新和上拉加载更多功能。 六、ListView的其他特性 1. 分割线:通过android:divider属性设置分割线,android:dividerHeight...

    设置ListView的显示风格

    3. 分批加载数据:当ListView滚动到底部时,通过懒加载机制加载更多数据。 四、ListView的动画效果 1. 添加进入和退出动画:通过setAnimation方法为ListView添加动画,可以是系统提供的动画资源,也可以自定义动画...

    Android基础控件ListView框架式思维

    - 开启ListView的分批加载功能(setCacheColorHint()),缓存部分已绘制但未显示的item,减少滑动时的重绘。 - 使用convertView机制,重用已经滑出屏幕的item视图,进一步提升性能。 5. **点击事件处理**: - ...

    案例三(ListView的使用

    最后,关于性能优化,除了ViewHolder模式外,还可以使用ListView的分批加载(OnScrollListener)来避免一次性加载所有数据,降低内存消耗。当用户滚动到列表底部时,动态加载更多数据。 ```java listView....

    Android中ListView的用法

    - 分批加载数据(下拉刷新、上拉加载更多):避免一次性加载大量数据导致的内存消耗和卡顿。 6. **自定义适配器** 如果ArrayAdapter和SimpleAdapter无法满足需求,可以创建自定义适配器继承自BaseAdapter。自定义...

    C#连接数据库listview显示

    - 分批处理:如果数据量大,考虑分批读取,避免一次性加载大量数据导致内存压力。 5. **事件处理**: - ListView控件通常会涉及到用户交互,如点击、选择等,需要通过事件处理程序进行响应。例如,`...

    ListView的实现

    - **分批加载**:如果数据量过大,可以采用下拉刷新、上拉加载更多等方式分批加载数据。 - **Header和Footer**:需要在列表头部或尾部添加固定视图时,可以使用`addHeaderView()`和`addFooterView()`方法。 7. **...

    安卓listview相关相关-使用AndroidAnnotations框架优雅地实现ListView功能例子源代码.rar

    7. **ListView的优化**:除了ViewHolder,还可能涉及到诸如分批加载(LazyLoading)、下拉刷新(SwipeRefreshLayout)和上拉加载更多(LoadMore)等优化技巧,以提升大型数据集的显示效果。 8. **...

    listView图片快速滑动实例

    懒加载的核心思想是分批加载资源,只加载用户当前需要看到的部分,而不是一次性加载所有数据。在ListView中,这意味着我们不会预先加载所有图片,而是等到图片所在的ListView项即将显示时才开始加载。这样可以显著...

    android ListView 详解

    3. 分批加载:通过监听ListView的滚动事件,当用户接近底部时,动态加载更多数据。 六、ListView的其他特性 1. 分割线:通过设置`android:divider`和`android:dividerHeight`属性,可以添加分割线。 2. 选择模式...

    ListView优化

    2. 分批加载数据:使用OnScrollListener监听滚动事件,实现下拉刷新和上拉加载更多功能。 五、ListView的滚动优化 1. 开启硬件加速:在清单文件中设置`android:hardwareAccelerated="true"`,开启Activity的硬件...

    安卓Android源码——ListView停止滚动开启下载图片.rar

    在安卓开发中,ListView是一个非常重要的组件,常用于展示大量数据列表。这个压缩包"安卓Android源码——ListView停止滚动开启下载图片.rar"显然包含了关于如何在ListView滚动时暂停图片下载,停止滚动后再继续下载...

    listview基本使用

    除了ViewHolder模式,还可以通过设置ListView的缓存颜色标识(cacheColorHint)、启用分批加载(setFastScrollEnabled)等方式来优化性能。 在“ListView入门”这个压缩包文件中,可能包含了实现上述功能的示例...

    Android-ListView

    同时,可以启用ListView的分批加载(例如使用`AbsListView.OnScrollListener`)以减少内存消耗。 这就是在Android中使用ListView的基本步骤。你可以根据实际需求对Adapter进行扩展,比如添加点击事件监听器,或者...

    Android程序开发之Listview下拉刷新上拉(滑动分页)加载更多

    总之,Android中的Listview下拉刷新和上拉加载更多是提高用户体验的关键特性,它们通过分批加载数据,减少了初始加载时间,同时也提供了流畅的交互体验。开发者可以通过自定义ListView组件、适配器以及监听滑动事件...

Global site tag (gtag.js) - Google Analytics