【Android】学习笔记(6)――ListView(上)
ListView
在Android应用开发中,经常会用到列表形式ListView,在Android库中,实现ListView的方式也比较多,下面分别介绍一下各种ListView的实现。
我所列举了4种ListView,如下所列:
1.使用ArrayAdapter来实现ListView
这种实现ListView是最容易实现,但最不容易扩展的实现方法。
首先不需要我们自己写布局文件,它所使用的布局文件是Android内置的。看下面代码:
publicclass ArrayAdapterDemoActivity extends Activity {//继承Activity类
private ListView listView = null;
List<String> list = new ArrayList<String>();//用一个ArrayList来存放数据
@Override
protectedvoid onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
listView = new ListView(this);
list = getData();//获得数据
listView.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_expandable_list_item_1,list));//设置Adapter,将布局和数据传入
setContentView(listView);
listView.setOnItemClickListener(new OnItemClickListener() {
@Override
publicvoid onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
// TODO Auto-generated method stub
//这里可以设置响应的事件
Toast.makeText(ArrayAdapterDemoActivity.this, "This is "+String.valueOf(list.get(arg2)), Toast.LENGTH_SHORT).show();
}
});
}
private List<String> getData(){
list.add("Jack");
list.add("Bob");
list.add("Theron");
return list;
}
}
首先实现了Activity类,重写了onCreate(Bundle savedInstanceState)方法,在方法内创建一个ListView的对象,用一个ArrayList来存放需要显示的数据。使用listView.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_expandable_list_item_1,list));来对ListView对象设置Adapter、布局和数据。其中android.R.layout.simple_expandable_list_item_1为Android自带默认的布局文件,list为设置的数据。最后,使用setContentView(listView);将ListView设置到当前的Activity中。
当然,可以对ListView对象绑定事件监听器,我这里使用了匿名内部类来对事件进行绑定,在onItemClick(AdapterView<?> arg0, View arg1, int arg2,long arg3)的方法内可以对需要实现的响应进行自己设置。
可以看到,上述的方式比较容易,但变化很小,每一个条目只能显示一行字。下面是运行效果:
2. 使用SimpleCursorAdapter来实现ListView
使用这种方式来实现ListView的话,一般与手机的数据库需要结合使用,比如:从手机的通讯录中得到列表等。
同样不需要自己创建布局文件,使用Android默认自带的即可。
如下代码片段所示:
publicclass SimpleCursorAdapterDemoActivity extends Activity {
private ListView listView;
private Cursor cursor = null;
@Override
publicvoid onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
listView = new ListView(this);
cursor = getContentResolver().query(
ContactsContract.Contacts.CONTENT_URI, null, null, null, null);//设置一个扫描通讯录的游标
startManagingCursor(cursor);//启动游标
ListAdapter listAdapter = new SimpleCursorAdapter(this,
android.R.layout.simple_expandable_list_item_1, cursor,
new String[] { ContactsContract.Contacts.DISPLAY_NAME },
newint[] { android.R.id.text1 });//SimpleCursorAdapter有五个参数,第一个是当前的Activity上下文对象;第二个是ListView的布局文件,此处为默认的布局文件;第三个是游标对象;第四个是ListView中每一列分别显示什么内容,这里显示的是名字;第五个是每一列的样式id,此处为默认的样式
listView.setAdapter(listAdapter); //将SimpleCursorAdapter设置给ListView
setContentView(listView);//将ListView显示在Activity上
listView.setOnItemClickListener(new OnItemClickListener() {//为ListView绑定事件监听器
@Override
publicvoid onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
// TODO Auto-generated method stub
Toast.makeText(SimpleCursorAdapterDemoActivity.this,
getList().get(arg2).getName(), Toast.LENGTH_SHORT)
.show();
}
});
}
public ArrayList<Contactor> getList() {//从手机中获得通讯录的内容
ArrayList<Contactor> list = new ArrayList<Contactor>();
String[] columns = new String[] { ContactsContract.Contacts.DISPLAY_NAME, ContactsContract.Contacts.HAS_PHONE_NUMBER };
Cursor cursor = SimpleCursorAdapterDemoActivity.this.getContentResolver().query(ContactsContract.Contacts.CONTENT_URI,
columns, null, null, null);
while (cursor.moveToNext()) {
Contactor bean = new Contactor();
bean.setName(cursor.getString(0));
bean.setPhone(cursor.getString(1));
list.add(bean);
}
cursor.close();
return list;
}
}
class Contactor{//每个通讯录的人都是一个Contactor对象
String name;
public String getName() {
return name;
}
publicvoid setName(String name) {
this.name = name;
}
public String getPhone() {
return phone;
}
publicvoid setPhone(String phone) {
this.phone = phone;
}
String phone;
}
上面有两个类,一个是Contactor类,是用于存放每个联系人的姓名和电话号码。另一个是继承了Activity的类,首先需要创建一个Cursor对象,用来扫描通讯录的内容,然后创建一个SimpleCursorAdapter对象,其构造函数需要5个参数,在上面程序中已经说明了。接着把SimpleCursorAdapter对象设置给ListView对象,最后把ListView在Activity上显示。
可以看出,使用SimpleCursorAdapter多用于对手机数据库的内容进行列表显示。运行效果如下图,下图的两个条目为模拟器通讯录中的两个条目:
以上是前两个例子,另两个稍等,在ListView(下)中说明,示例程序也在下一篇中添加附件。
如果我的文章给与了你帮助,就不妨请我喝杯咖啡吧,点击->
更多相关文章
- 【Android】学习笔记(9)――SQLite简单使用
- (转载)Android显示GIF
- Android(安卓)国际化笔记
- Android--GreenDao
- Android(安卓)ArrayList LinkedList Set HashMap的介绍
- Android分类列表之RecyclerView-ViewType实现
- android UI设计秘籍
- Android实现监测网络变化以及无网络listview填充 简易新闻(十六
- Android最新组件RecyclerView,替代ListView