ListView、GridView

1,ListView 是android开发中最常用的控件之一,一般构成列表包括三个元素,ListView:用来展示列表的视图、Adapter:数据与视图连接的桥梁、Data:具体的数据包括 字符串 图片 或者控件。

     适配器一般有以下几种类型

     ArrayAdapter:Android中最简单的一种适配器,专门用于列表控件。只显示一行数据。

     SimpleAdapter:此适配器有最好的扩充性,可以自定义出各种效果。经常使用静态数据填充列表。

     CursorAdapter:通过游标向列表提供数据。

     ResourceCursorAdapter:这个适配器扩展了CursorAdapter,知道如何从资源创建视图。

     SimpleCursorAdapter:这个适配器扩展了ResourceCursorAdapter,从游标中得列创建 TextView/ImageView视图。下面获取通讯录的示例:

Xml代码 
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:orientation="vertical"  
  4.     android:layout_width="fill_parent"  
  5.     android:layout_height="fill_parent"  
  6.     android:background="@drawable/bg"  
  7.      
  8.     >  
  9.     <ListView   
  10.     android:id="@+id/contacts_list"  
  11.     android:layout_width="fill_parent"  
  12.     android:layout_height="fill_parent"  
  13.     >  
  14.     </ListView>  
  15. </LinearLayout>  

 

Java代码 
  1. package net.csdn.blog.androidtoast;  
  2.   
  3. import java.util.ArrayList;  
  4. import java.util.HashMap;  
  5. import java.util.Map;  
  6.   
  7. import android.app.Activity;  
  8. import android.database.Cursor;  
  9. import android.os.Bundle;  
  10. import android.provider.ContactsContract;  
  11. import android.view.View;  
  12. import android.widget.AdapterView;  
  13. import android.widget.ListAdapter;  
  14. import android.widget.ListView;  
  15. import android.widget.SimpleAdapter;  
  16. import android.widget.Toast;  
  17.   
  18. public class MainActivity extends Activity {  
  19.       
  20.      ListView     mListView;  
  21.      ArrayList<Map<String, String>> listData;  
  22.            
  23.     static final String NAME = "name";  
  24.     static final String NUMBER = "number";  
  25.     /** Called when the activity is first created. */  
  26.     @Override  
  27.     public void onCreate(Bundle savedInstanceState) {  
  28.         super.onCreate(savedInstanceState);  
  29.         setContentView(R.layout.main);  
  30.         getContacts();  
  31.     }  
  32.   
  33.     /** 
  34.      * 获取联系人列表 
  35.      */  
  36.     private void getContacts() {  
  37.         mListView=(ListView) findViewById(R.id.contacts_list);  
  38.         listData = new ArrayList<Map<String, String>>();  
  39.         //获取数据库Cursor  
  40.         Cursor cur=getContentResolver().query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);  
  41.         startManagingCursor(cur);  
  42.         while (cur.moveToNext()) {  
  43.           Map<String, String> mp = new HashMap<String, String>();  
  44.           long id = cur.getLong(cur.getColumnIndex("_id"));  
  45.           Cursor pcur = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,  
  46.                               null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID + "=" + Long.toString(id),   
  47.                               null, null);  
  48.                     
  49.                         // 处理多个号码的情况  
  50.                    String phoneNumbers = "";  
  51.                    while (pcur.moveToNext()) {  
  52.                            String strPhoneNumber = pcur.getString(pcur.getColumnIndex(  
  53.                                    ContactsContract.CommonDataKinds.Phone.NUMBER));  
  54.                           phoneNumbers += strPhoneNumber + ":";  
  55.                        }  
  56.                        phoneNumbers += "\n";  
  57.                        pcur.close();  
  58.                          
  59.                        String name = cur.getString(cur.getColumnIndex("display_name"));  
  60.                        mp.put(NAME, name);  
  61.                        mp.put(NUMBER, phoneNumbers);  
  62.                        listData.add(mp);  
  63.                     }  
  64.          cur.close();  
  65.            
  66.         // 建立一个适配器去查询数据  
  67.         ListAdapter adapter = new SimpleAdapter(this, listData, android.R.layout.simple_list_item_2,  
  68.                new String[]{NAME, NUMBER},  
  69.                new int[] {android.R.id.text1, android.R.id.text2});  
  70.         mListView.setAdapter(adapter);  
  71.         //为listView添加事件监听  
  72.         mListView.setOnItemSelectedListener(new ListView.OnItemSelectedListener(){  
  73.   
  74.             @Override  
  75.             public void onItemSelected(AdapterView<?> parent, View view,  
  76.                     int position, long id) {  
  77.                 Toast.makeText(getApplicationContext(), "当前所在行为:"+Long.toString(parent.getSelectedItemId()+1), 1).show();  
  78.             }  
  79.   
  80.             @Override  
  81.             public void onNothingSelected(AdapterView<?> parent) {  
  82.                 // TODO Auto-generated method stub  
  83.                   
  84.             }  
  85.               
  86.         });  
  87.     }  

  88. 2,GridView 网格视图,用于显示多行多列。
    Xml代码 
    1. <?xml version="1.0" encoding="utf-8"?>  
    2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
    3.     android:orientation="vertical"  
    4.     android:layout_width="fill_parent"  
    5.     android:layout_height="fill_parent"  
    6.     android:background="@drawable/bg"  
    7.     >  
    8.     <GridView  
    9.         android:id="@+id/gridview"  
    10.         android:layout_width="fill_parent"  
    11.         android:layout_height="wrap_content"  
    12.         android:numColumns="3"/>  
    13.           
    14. </LinearLayout>  

     

    Xml代码  收藏代码
    1. <?xml version="1.0" encoding="utf-8"?>  
    2.   
    3. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
    4.     android:orientation="vertical" android:layout_width="fill_parent"  
    5.     android:layout_height="fill_parent" android:scrollbars="vertical">  
    6.      <ImageView     
    7.                android:layout_height="100dip"     
    8.                android:id="@+id/ItemImage"     
    9.                android:layout_width="80dip"   
    10.                android:src="@drawable/png1"   
    11.                android:layout_gravity="center_horizontal"/>   
    12.                    
    13.          <TextView     
    14.                android:layout_width="wrap_content"     
    15.                android:layout_height="wrap_content"   
    16.                android:layout_gravity="center"    
    17.                android:id="@+id/ItemText" />    
    18. </LinearLayout>  

     

    Java代码 
    1. package net.csdn.blog.androidtoast;  
    2.   
    3. import java.util.ArrayList;  
    4. import java.util.HashMap;  
    5.   
    6. import android.app.Activity;  
    7. import android.os.Bundle;  
    8. import android.view.Gravity;  
    9. import android.view.View;  
    10. import android.widget.AdapterView;  
    11. import android.widget.GridView;  
    12. import android.widget.SimpleAdapter;  
    13. import android.widget.Toast;  
    14.   
    15. public class MainActivity extends Activity {  
    16.     /** Called when the activity is first created. */  
    17.     //定义图片整型数组  
    18.     private int[] mImages={  
    19.             R.drawable.png1,  
    20.             R.drawable.png2,  
    21.             R.drawable.png3,  
    22.             R.drawable.png4,  
    23.             R.drawable.png5,  
    24.             R.drawable.png6,  
    25.             R.drawable.png7,  
    26.             R.drawable.png8,  
    27.             R.drawable.png9  
    28.   
    29.     };  
    30.     @Override  
    31.     public void onCreate(Bundle savedInstanceState) {  
    32.         super.onCreate(savedInstanceState);  
    33.         setContentView(R.layout.main);  
    34.           
    35.         //实例化GridView  
    36.         GridView mGridView=(GridView) findViewById(R.id.gridview);  
    37.         // 生成动态数组,并且传入数据  
    38.         ArrayList<HashMap<String, Object>> lstImageItem = new ArrayList<HashMap<String, Object>>();  
    39.           
    40.         for (int i = 0; i < 9; i++) {  
    41.             HashMap<String, Object> map = new HashMap<String, Object>();  
    42.             map.put("ItemImage", mImages[i]);// 添加图像资源的ID  
    43.             map.put("ItemText", "NO." + String.valueOf(i+1));// 按序号做ItemText  
    44.             lstImageItem.add(map);  
    45.         }  
    46.         //构建一个适配器  
    47.         SimpleAdapter simple = new SimpleAdapter(this, lstImageItem,  
    48.                 R.layout.gridviewitem,  
    49.                 new String[] { "ItemImage", "ItemText" }, new int[] {  
    50.                         R.id.ItemImage, R.id.ItemText });  
    51.         mGridView.setAdapter(simple);  
    52.         //添加选择项监听事件  
    53.         mGridView.setOnItemClickListener(new GridView.OnItemClickListener(){  
    54.   
    55.             @Override  
    56.             public void onItemClick(AdapterView<?> parent, View view,  
    57.                     int position, long id) {  
    58.                 Toast toast=Toast.makeText(getApplicationContext(), "你选择了"+(position+1)+"号图片", 1);  
    59.                 toast.setGravity(Gravity.BOTTOM, 0, 0);  
    60.                 toast.show();  
    61.             }  
    62.               
    63.         });  
    64.           
    65.     }  
posted @ 2016-06-16 08:33  丶阳光沙滩和少年  阅读(63)  评论(0)    收藏  举报