listview的数据加载

效果如图:

listview的数据加载,主要用了Scroll监听来判断其位置是否需要加载信息,如果需要加载信息就先显示加载数据的view,然后进行数据的加载,加载完成后,设加载数据的view不可见,如果加载数据的时候数据位null,这时就移除这个view。

listView.addFooterView(moreView); // 添加底部view(上图中的数据加载中...),一定要在setAdapter之前添加,否则会报错。
listView.removeFooterView(moreView); // 移除底部(同上)

下面上个Demo,是我从网上找的。 写个博文记录一下这个功能,挺实用的。

public class MainActivity extends Activity implements OnScrollListener {

	private static final String TAG = "MainActivity";

	private ListView listView;
	private View moreView; // 加载更多页面

	private SimpleAdapter adapter;
	private ArrayList<HashMap<String, String>> listData;

	private int lastItem;
	private int count;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		listView = (ListView) findViewById(R.id.listView);
		moreView = getLayoutInflater().inflate(R.layout.load, null);
		listData = new ArrayList<HashMap<String, String>>();

		prepareData(); // 准备数据
		count = listData.size();

		adapter = new SimpleAdapter(this, listData, R.layout.item,
				new String[] { "itemText" }, new int[] { R.id.itemText });

		listView.addFooterView(moreView); // 添加底部view,一定要在setAdapter之前添加,否则会报错。

		listView.setAdapter(adapter); // 设置adapter
		listView.setOnScrollListener(this); // 设置listview的滚动事件
	}

	private void prepareData() { // 准备数据
		for (int i = 0; i < 10; i++) {
			HashMap<String, String> map = new HashMap<String, String>();
			map.put("itemText", "测试数据" + i);
			listData.add(map);
		}

	}

	private void loadMoreData() { // 加载更多数据
		count = adapter.getCount();
		for (int i = count; i < count + 5; i++) {
			HashMap<String, String> map = new HashMap<String, String>();
			map.put("itemText", "测试数据" + i);
			listData.add(map);
		}
		count = listData.size();
	}

	@Override
	public void onScroll(AbsListView view, int firstVisibleItem,
			int visibleItemCount, int totalItemCount) {

		Log.i(TAG, "firstVisibleItem=" + firstVisibleItem
				+ "\nvisibleItemCount=" + visibleItemCount + "\ntotalItemCount"
				+ totalItemCount);

		lastItem = firstVisibleItem + visibleItemCount - 1; // 减1是因为上面加了个addFooterView

	}

	@Override
	public void onScrollStateChanged(AbsListView view, int scrollState) {
		Log.i(TAG, "scrollState=" + scrollState);
		// 下拉到空闲是,且最后一个item的数等于数据的总数时,进行更新
		System.out.println("lastItem:"+lastItem + "\n" + "count" +count);
		if (lastItem == count && scrollState == this.SCROLL_STATE_IDLE) {
			Log.i(TAG, "拉到最底部");
			moreView.setVisibility(view.VISIBLE);

			mHandler.sendEmptyMessage(0);  //发送到Handler,执行加载数据

		}

	}

	// 声明Handler
	private Handler mHandler = new Handler() {
		public void handleMessage(android.os.Message msg) {
			switch (msg.what) {
			case 0:

				try {
					Thread.sleep(400);
				} catch (InterruptedException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				loadMoreData(); // 加载更多数据,这里可以使用异步加载
				adapter.notifyDataSetChanged(); //notifyDataSetChanged()可以在修改适配器绑定的数组后,不用重新刷新Activity,通知Activity更新ListView。
				moreView.setVisibility(View.GONE);

				if (count > 30) {
					Toast.makeText(MainActivity.this, "木有更多数据!", 3000).show();
					listView.removeFooterView(moreView); // 移除底部
				}
				Log.i(TAG, "加载更多数据");
				break;

			}
		};
	};

}

activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <ListView
        android:id="@+id/listView"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:cacheColorHint="#00000000"

         />

</RelativeLayout>



listview的数据加载,布布扣,bubuko.com

时间: 2024-08-05 10:49:57

listview的数据加载的相关文章

XE7 &amp; FMX 那些年我们一起上过的控件:ListView 之 (2) 加载数据时如何显示进度条

本文介绍一下ListView下如何加载数据.及使用进度条反馈当前进度给用户. 注意: 原创作品,请尊重作者劳动成果,转载请注明出处!!!原文永久固定地址:http://www.cnblogs.com/weii/p/4190694.html 我们先来看看效果图: 进度条需要这样用的,以下为本文参考代码: procedure TForm1.Button2Click(Sender: TObject); begin TThread.CreateAnonymousThread( procedure() v

XE7 &amp; FMX 那些年我们一起上过的控件:ListView 之 (3) 加载数据时如何显示自定义样式

本文介绍一下ListView下如何加载数据.及使用进度条反馈当前进度给用户. 注意: 原创作品,请尊重作者劳动成果,转载请注明出处!!!原文永久固定地址:http://www.cnblogs.com/weii/p/4190719.html 我们先来看看效果图: FMX异常强大,我们可以发挥想像,自定义进度样式,以下为本文参考代码: procedure TForm1.Button3Click(Sender: TObject); var pe: TPie; //扇形作进度 rc: TRoundRec

ListView用法及加载数据时的闪烁问题和加载数据过慢问题

ListView介绍及添加数据时的闪烁问题 1.     ListView类 1.1 ListView常用的基本属性: (1)FullRowSelect:设置是否行选择模式.(默认为false) 提示:只有在Details视图该属性才有意义. (2) GridLines:设置行和列之间是否显示网格线.(默认为false)提示:只有在Details视图该属性才有意义. (3)AllowColumnReorder:设置是否可拖动列标头来对改变列的顺序.(默认为false)提示:只有在Details视

Android Demo之旅 ListView底部添加加载更多按钮实现数据分页

在我们的实际项目中,数据应该说是很多的,我们的ListView不可能一下子把数据全部加载进来,我们可以当滚动条滚动到ListView的底部的时候,给一个更多的提示,当我们点击它即加载下一页的数据,相当与我们的分页效果,参考网上的东西,写了一个小小的demo,并总结了一些知识点,功能图如下:    源代码下载地址:http://download.csdn.net/detail/harderxin/7762625 掌握知识点: 1)自定义Adapter,将数据和ListView绑定起来 2)理解La

Android下设置ListView数据加载完成后执行layoutanimation

今天使用android的volley框架写了一个简单的网络天气获取的demo. 承载数据的空间是ListView 因为是网络加载,必然先要设置ListView的默认数据,我设置的就是那个Loading... 然后从网络获取到数据后,再解析,然后更新到adapter,然后notifyDataSetChanged更新数据到ListView. 可是ListView设置了layoutanimation,这样默认的ListView打开后那个Loading执行了动画,当网络数据加载完毕后, layoutan

ListView上拉加载下拉刷新

主要用到了这个几个文件,MainActivity是界面的Activity,MyAdapter是ListView的自定义适配,MyListView是自定义带头部LIistView,如果只需要上拉加载就不需要:activity_main.xml是住界面,item.xml是ListView的子布局里面只有一个TextView,listview_footer.xml是listview的加载更多的底部布局,listview_header.xml是listview的头部布局. MainActivity.ja

ListView上拉加载和下拉刷新多种实现方式

ListView上拉加载和下拉刷新多种实现方式 该篇为ListView下拉刷新和上拉加载实现的各种方法大合集.可能在具体的细节逻辑上处理不太到位,但基本上完成逻辑的实现.细节方面,个人可以根据自己的需求进行完善. 该博客将以四种思路来完成下拉刷新和上拉加载 自定义View实现上拉加载和下拉刷新 使用PullToRefresh 实现上拉加载和下拉刷新 使用Ultra-Pull-To-Refresh实现上拉加载和下拉刷新 使用SwipeToRefreshLayout实现上拉加载和下拉刷新 如果你对L

两种数据加载动画

android 数据加载动画: <FrameLayout android:layout_centerInParent="true" android:layout_width="wrap_content" android:layout_height="wrap_content" > <RelativeLayout android:id="@+id/rl_loading" android:layout_width

android UI进阶之实现listview的分页加载

 分享了下拉刷新,这是一个用户体验非常好的操作方式.新浪微薄就是使用这种方式的典型. 还有个问题,当用户从网络上读取微薄的时候,如果一下子全部加载用户未读的微薄这将耗费比较长的时间,造成不好的用户体验,同时一屏的内容也不足以显示如此多的内容.这时候,我们就需要用到另一个功能,那就是listview的分页了.通过分页分次加载数据,用户看多少就去加载多少. 通常这也分为两种方式,一种是设置一个按钮,用户点击即加载.另一种是当用户滑动到底部时自动加载.今天我就和大家分享一下这个功能的实现. 首先,