使用ListView合理布局数据源

最新版本:使用ListView合理布局数据源

这一次来个稍微复杂点的,在Android中使用ListView,有人不能从ListView名字意会这个控件是干什么的,待在下这么一描述,您应该会明白了。当我们不确定我们需要显示具体数据的条目的时候,这时ListView就派上用场了,使用ListView可以列表显示数据,而且可以自适应内容的条目。

       在使用ListView之前,我稍微说下这个ListView的基本用法,使用ListView一般有下面三个元素:

       1ListView,这个是用来显示列表的view

       2、适配器,这个是将将数据映射到ListView上去的中介;

       3、数据,这个就是你要显示的数据源啦。

       下面,我还是通过一个例子来简单介绍ListView的用法。具体的方法都在代码中有说明,看官边看代码,边看注释应该比较好吸收,消化。

动作一

创建ListViewTest项目工程,这是我完成之后的目录:

 ListView项目目录

动作二

在布局文件中,添加一个ListView控件,完整代码如下:

  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout  
  3.     xmlns:android="http://schemas.android.com/apk/res/android"  
  4.     android:orientation="vertical"  
  5.     android:layout_width="fill_parent"  
  6.     android:layout_height="fill_parent">  
  7.     <TextView  
  8.         android:id="@+id/myTextView"  
  9.         android:layout_width="fill_parent"  
  10.         android:layout_height="wrap_content"  
  11.         android:text="@string/hello" />  
  12.     <ListView  
  13.         android:id="@+id/myListView"  
  14.         android:layout_width="wrap_content"  
  15.         android:layout_height="fill_parent">  
  16.     </ListView>  
  17. </LinearLayout> 

动作三

修改主要的代码,理解见注解: 

  1. package org.ourunix.android.listviewtest;  
  2.   
  3. import android.app.Activity;  
  4. import android.content.Context;  
  5. import android.database.Cursor;  
  6. import android.os.Bundle;  
  7. import android.provider.ContactsContract;  
  8. import android.provider.ContactsContract.PhoneLookup;  
  9. import android.view.View;  
  10. import android.widget.AdapterView;  
  11. import android.widget.ListAdapter;  
  12. import android.widget.ListView;  
  13. import android.widget.SimpleCursorAdapter;  
  14. import android.widget.TextView;  
  15. import android.widget.AdapterView.OnItemClickListener;  
  16. import android.widget.AdapterView.OnItemSelectedListener;  
  17.   
  18. public class ListViewTestActivity extends Activity {  
  19.     private Context mContext;  
  20.     private ListView mListView;  
  21.     private TextView mTextView;  
  22.   
  23.     public void onCreate(Bundle savedInstanceState) {  
  24.         super.onCreate(savedInstanceState);  
  25.         setContentView(R.layout.main);  
  26.         mContext = ListViewTestActivity.this;  
  27.   
  28.         mListView = (ListView) findViewById(R.id.myListView);  
  29.         mTextView = (TextView) findViewById(R.id.myTextView);  
  30.   
  31.         // 获取指向电话簿数据库的游标  
  32.         Cursor cur = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);  
  33.         startManagingCursor(cur);  
  34.   
  35.         // ListAdapter是ListView与后台数据的桥梁  
  36.         ListAdapter adapter = new SimpleCursorAdapter(mContext,  
  37.         // 定义ListView中每行显示的样式, android.R.layout.simple_list_item_2表示每行显示两个数据项  
  38.                 android.R.layout.simple_list_item_2,  
  39.                 // 刚才获得的指向电话本数据库的游标  
  40.                 cur,  
  41.                 // 从数据库的NAME和LAST_TIME_CONTACTED两列中取数据  
  42.                 new String[] { PhoneLookup.DISPLAY_NAME,  
  43.                         PhoneLookup.LAST_TIME_CONTACTED},  
  44.                 // 与NAME和NUMBER对应的Views  
  45.                 new int[] { android.R.id.text1, android.R.id.text2 });  
  46.         mListView.setAdapter(adapter);  
  47.   
  48.         // 为ListView添加滚动监听  
  49.         mListView.setOnItemSelectedListener(new OnItemSelectedListener() {  
  50.             public void onItemSelected(AdapterView<?> arg0, View arg1,  
  51.                     int arg2, long arg3) {  
  52.                 // TODO Auto-generated method stub  
  53.                 display("现在是第" + Long.toString(arg0.getSelectedItemId()) + "条");  
  54.             }  
  55.   
  56.             public void onNothingSelected(AdapterView<?> arg0) {  
  57.                 // TODO Auto-generated method stub  
  58.   
  59.             }  
  60.         });  
  61.   
  62.         // 为ListView添加选中监听  
  63.         mListView.setOnItemClickListener(new OnItemClickListener() {  
  64.             public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,  
  65.                     long arg3) {  
  66.                 // TODO Auto-generated method stub  
  67.                 display("你现在选中了第" + Integer.toString(arg2 + 1) + "项");  
  68.             }  
  69.         });  
  70.     }  
  71.   
  72.     // 用来显示信息  
  73.     public void display(String str) {  
  74.         mTextView.setText(str);  
  75.     }  

动作四

在运行Spinnertest,我们需要在Mainfest.xml文件下添加下访问联系人的权限如下:

  1. <uses-permission  
  2.         android:name="android.permission.READ_CONTACTS" />  

ok,运行ListViewTest,效果如下:

 运行ListView项目

点击第二项

运行ListView项目2

源码:ListViewTest

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值