行布局(Row Layout)

你能够指定列表中一个单独的行的布局。只要在ListAdapter对象中指定一个布局资源就可以了。ListAdapter绑定数据到ListView。

一个ListAdapter构造函数有一个参数来指定每一行的布局资源。此外,它还有另外两个参数来指定哪一个数据域与行布局资源中的对象相关联。这两个参数一般是平行数组。

Android 提供了一些标准的布局资源。这些都在R.layout类中,名字诸如simple_list_item_1, simple_list_item_2, 和two_line_list_item. 下面的布局XML是two_line_list_item, 对于每一行,它分两行来表示数据,一个在上一个在下。

 

  1. <?xml version="1.0" encoding="utf-8"?>  
  2.  <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.      android:layout_width="match_parent"  
  4.      android:layout_height="wrap_content"  
  5.      android:orientation="vertical">  
  6.   
  7.      <TextView android:id="@+id/text1"  
  8.          android:textSize="16sp"  
  9.          android:textStyle="bold"  
  10.          android:layout_width="match_parent"  
  11.          android:layout_height="wrap_content"/>  
  12.   
  13.      <TextView android:id="@+id/text2"  
  14.          android:textSize="16sp"  
  15.          android:layout_width="match_parent"  
  16.          android:layout_height="wrap_content"/>  
  17.  </LinearLayout>  

你必须确定绑定到这个布局的每一个TextView对象的数据。下一节就做这一方面的介绍。

 

绑定数据

绑定ListActivity的ListView对象和数据,要使用一个实现了ListAdapter接口的类。Android提供了两个标准的list adapters:绑定静态数据(Maps)的SimpleAdapter,和绑定Cursor的SimpleCursorAdapter。

下面这个例子实例一个自定义的ListActivity,它查询Contacts provider的所有contacts,然后绑定Name和Company两个域到ListActivity的ListView中的分为两行的一个列表项。

  1. public class MyListAdapter extends ListActivity  
  2. @Override  
  3.      protected void onCreate(Bundle savedInstanceState)  
  4.       
  5.           super.onCreate(savedInstanceState);           
  6.           // We'll define custom screen layout here (the one shown above), but           
  7.           // typically, you could just use the standard ListActivity layout.  
  8.           setContentView(R.layout.custom_list_activity_view);   
  9.           // Query for all people contacts using the Contacts.People convenience class.   
  10.           // Put managed wrapper around the retrieved cursor so we don't have to worry about  
  11.           // requerying or closing it as the activity changes state.   
  12.           mCursor this.getContentResolver().query(People.CONTENT_URI, null, null, null, null);   
  13.           startManagingCursor(mCursor);  
  14.           // Now create new list adapter bound to the cursor.   
  15.           // SimpleListAdapter is designed for binding to Cursor.  
  16.           ListAdapter adapter new SimpleCursorAdapter(  
  17.                  this, // Context.  
  18.                  android.R.layout.two_line_list_item,  
  19.           // Specify the row template to use (here, two columns bound to the two retrieved cursor rows).  
  20.                  mCursor,  
  21.           // Pass in the cursor to bind to.  
  22.                  new String[] {People.NAME, People.COMPANY},   
  23.           // Array of cursor columns to bind to.   
  24.                 new int[] {android.R.id.text1, android.R.id.text2});   
  25.           // Parallel array of which template objects to bind to those columns.   
  26.           // Bind to our new adapter.   
  27.           setListAdapter(adapter);   
  28.       
  29.  

  

 --------------------------------------- 
!!!!!!!!!!!!!!!!!!!!!!