一般在做网页的时候,要显示一个列表的数据,一般是对一个list的类进行循环,输出一大串的HTML字符串。数据比较多的话就会分页,比如一页10条记录,去数据库查询的时候就会limit 10条记录,速度非常快。
在 Android中遇到几千条数据的时候,上下滑动,跟几十条数据的滑动流畅程度差不多,就是刚开始载入速度不一样。对Android 中的Adapter 数据绑定,进行Log输出后,发现是边滑动,数据边绑定的,并不是有多少数据一次性绑定完。但是数据一般是用sql 语句一次性查询出来,这点跟Web中的还是有点区别。
好了废话说了很 多,Android中ListView一般跟Cursor和Adapter有关。很多东西google都帮你弄好了,你只需要按照它约定的弄就行了。之前 我非常反感这种约定俗成的方式,觉得别人要求你该怎么写,你就该怎么写,但是只从读了这么一句话“你动不了Application Framework 的大结构,也不需要动。这是福利不是约束”。我就坦然了。
这次介绍的是
SimpleCursorAdapter(Context context, int layout, Cursor c, String[] from, int[] to)
第二个layout的参数是ListView中单行的布局, c是你数据的游标。刚开始其实from和to比较让人不熟悉,From是你查询出的数据,to是单行布局中的单独控件,一对一的关系,用起来非常方便。下面的是具体的例子。
SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, R.layout.provice_list_item, cursor, new String[] {Location.PROVICE, Location.CITY }, new int[] { R.id.princeTextView,android.R.id.text1 });
写好Adapter,基本上大部分工作已经完成,只需要给你的listview设置这个adapter就行了。一个显示数据的列表就完成了。
下面是关键的代码:
package com.waitingfy.android; import com.waitingfy.android.ServiceInfo.Location; import android.app.ListActivity; import android.database.Cursor; import android.os.Bundle; import android.view.View; import android.widget.ListView; import android.widget.SimpleCursorAdapter; //注意,要继承ListActivity,而不是普通的Activity public class BasicListViewActivity extends ListActivity { /** *定义我们需要筛选的字段,ID是必须项,否则会报错。 */ String[] mLocationProjection={ Location._ID, Location.PROVICE, Location.CITY }; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //注意用到的布局中必须有定义id为"@android:id/list"的Listview控件 setContentView(R.layout.main); Cursor cursor = getContentResolver().query(Location.CONTENT_URI, mLocationProjection, null, null, null); //from跟to,非常有趣,把什么值显示在什么控件上。,是一个数组,支持多个绑定 SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, R.layout.provice_list_item, cursor, new String[] {Location.PROVICE, Location.CITY }, new int[] { R.id.princeTextView,android.R.id.text1 }); //给listview设置cursor有很多种方式,这是最简单的方式 setListAdapter(adapter); /**下面的去掉注释后就ok*/ // //第二种方式 // ListView mListView = (ListView)findViewById(android.R.id.list); // mListView.setAdapter(adapter); // View view = (View)findViewById(R.id.emptyView); // //可以设置"当没有数据时"显示的布局 // mListView.setEmptyView(view); /**上面去掉注释后就ok*/ } }
后面会介绍ListView的其他用法。先到这里。
记得下载整个例子好好看下,里面自带数据库文件。
例子下载
Tags: listview
141
[…] 还记得这篇文章吗?Android ListView 最基本的用法,使用SimpleCursorAdapter 。 附例子。我在使用的时候,载入大量数据时,开始会很卡,滑动倒是不会卡,就是因为开始载入是用一条sql语句查询所有数据。Android中遇到这样的问题一般用线程来执行。看了下Android 4.0 Contacts的载入方式,它非常流畅。发现它用了CursorLoader ,这里用它来做一个小小的例子。左边的是刚开始的效果,你也可以改成一个dialog罩住不让用户用。右边的是载入完成的样子,设计到联系人隐私,画了下。 […]
为什么下载之后是空的呢?
应该不会啊,尝试去这地址下载。http://download.csdn.net/detail/fox64194167/4515009