最新版本:使用ListView合理布局数据源
这一次来个稍微复杂点的,在Android中使用ListView,有人不能从ListView名字意会这个控件是干什么的,待在下这么一描述,您应该会明白了。当我们不确定我们需要显示具体数据的条目的时候,这时ListView就派上用场了,使用ListView可以列表显示数据,而且可以自适应内容的条目。
在使用ListView之前,我稍微说下这个ListView的基本用法,使用ListView一般有下面三个元素:
1、ListView,这个是用来显示列表的view;
2、适配器,这个是将将数据映射到ListView上去的中介;
3、数据,这个就是你要显示的数据源啦。
下面,我还是通过一个例子来简单介绍ListView的用法。具体的方法都在代码中有说明,看官边看代码,边看注释应该比较好吸收,消化。
动作一
创建ListViewTest项目工程,这是我完成之后的目录:
动作二
在布局文件中,添加一个ListView控件,完整代码如下:
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="vertical"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent">
- <TextView
- android:id="@+id/myTextView"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:text="@string/hello" />
- <ListView
- android:id="@+id/myListView"
- android:layout_width="wrap_content"
- android:layout_height="fill_parent">
- </ListView>
- </LinearLayout>
动作三
修改主要的代码,理解见注解:
- package org.ourunix.android.listviewtest;
- import android.app.Activity;
- import android.content.Context;
- import android.database.Cursor;
- import android.os.Bundle;
- import android.provider.ContactsContract;
- import android.provider.ContactsContract.PhoneLookup;
- import android.view.View;
- import android.widget.AdapterView;
- import android.widget.ListAdapter;
- import android.widget.ListView;
- import android.widget.SimpleCursorAdapter;
- import android.widget.TextView;
- import android.widget.AdapterView.OnItemClickListener;
- import android.widget.AdapterView.OnItemSelectedListener;
- public class ListViewTestActivity extends Activity {
- private Context mContext;
- private ListView mListView;
- private TextView mTextView;
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- mContext = ListViewTestActivity.this;
- mListView = (ListView) findViewById(R.id.myListView);
- mTextView = (TextView) findViewById(R.id.myTextView);
- // 获取指向电话簿数据库的游标
- Cursor cur = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
- startManagingCursor(cur);
- // ListAdapter是ListView与后台数据的桥梁
- ListAdapter adapter = new SimpleCursorAdapter(mContext,
- // 定义ListView中每行显示的样式, android.R.layout.simple_list_item_2表示每行显示两个数据项
- android.R.layout.simple_list_item_2,
- // 刚才获得的指向电话本数据库的游标
- cur,
- // 从数据库的NAME和LAST_TIME_CONTACTED两列中取数据
- new String[] { PhoneLookup.DISPLAY_NAME,
- PhoneLookup.LAST_TIME_CONTACTED},
- // 与NAME和NUMBER对应的Views
- new int[] { android.R.id.text1, android.R.id.text2 });
- mListView.setAdapter(adapter);
- // 为ListView添加滚动监听
- mListView.setOnItemSelectedListener(new OnItemSelectedListener() {
- public void onItemSelected(AdapterView<?> arg0, View arg1,
- int arg2, long arg3) {
- // TODO Auto-generated method stub
- display("现在是第" + Long.toString(arg0.getSelectedItemId()) + "条");
- }
- public void onNothingSelected(AdapterView<?> arg0) {
- // TODO Auto-generated method stub
- }
- });
- // 为ListView添加选中监听
- mListView.setOnItemClickListener(new OnItemClickListener() {
- public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
- long arg3) {
- // TODO Auto-generated method stub
- display("你现在选中了第" + Integer.toString(arg2 + 1) + "项");
- }
- });
- }
- // 用来显示信息
- public void display(String str) {
- mTextView.setText(str);
- }
- }
动作四
在运行Spinnertest,我们需要在Mainfest.xml文件下添加下访问联系人的权限如下:
- <uses-permission
- android:name="android.permission.READ_CONTACTS" />
ok,运行ListViewTest,效果如下:
点击第二项
源码:ListViewTest