android開發經典實例系列-----ListView、GridView

http://androidtoast.iteye.com/blog/1166433

 

android--應用實戰


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. <ListView
  9. android:id="@+id/contacts_list"
  10. android:layout_width="fill_parent"
  11. android:layout_height="fill_parent"
  12. >
  13. </ListView>
  14. </LinearLayout>
  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. import java.util.ArrayList;
  3. import java.util.HashMap;
  4. import java.util.Map;
  5. import android.app.Activity;
  6. import android.database.Cursor;
  7. import android.os.Bundle;
  8. import android.provider.ContactsContract;
  9. import android.view.View;
  10. import android.widget.AdapterView;
  11. import android.widget.ListAdapter;
  12. import android.widget.ListView;
  13. import android.widget.SimpleAdapter;
  14. import android.widget.Toast;
  15. public class MainActivity extends Activity {
  16. ListView mListView;
  17. ArrayList<Map<String, String>> listData;
  18. static final String NAME = "name";
  19. static final String NUMBER = "number";
  20. /** Called when the activity is first created. */
  21. @Override
  22. public void onCreate(Bundle savedInstanceState) {
  23. super.onCreate(savedInstanceState);
  24. setContentView(R.layout.main);
  25. getContacts();
  26. }
  27. /**
  28. * 獲取聯繫人列表
  29. */
  30. private void getContacts() {
  31. mListView=(ListView) findViewById(R.id.contacts_list);
  32. listData = new ArrayList<Map<String, String>>();
  33. //獲取數據庫Cursor
  34. Cursor cur=getContentResolver().query(ContactsContract.Contacts.CONTENT_URI, nullnullnullnull);
  35. startManagingCursor(cur);
  36. while (cur.moveToNext()) {
  37. Map<String, String> mp = new HashMap<String, String>();
  38. long id = cur.getLong(cur.getColumnIndex("_id"));
  39. Cursor pcur = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
  40. null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID + "=" + Long.toString(id),
  41. nullnull);
  42. // 處理多個號碼的情況
  43. String phoneNumbers = "";
  44. while (pcur.moveToNext()) {
  45. String strPhoneNumber = pcur.getString(pcur.getColumnIndex(
  46. ContactsContract.CommonDataKinds.Phone.NUMBER));
  47. phoneNumbers += strPhoneNumber + ":";
  48. }
  49. phoneNumbers += "\n";
  50. pcur.close();
  51. String name = cur.getString(cur.getColumnIndex("display_name"));
  52. mp.put(NAME, name);
  53. mp.put(NUMBER, phoneNumbers);
  54. listData.add(mp);
  55. }
  56. cur.close();
  57. // 建立一個適配器去查詢數據
  58. ListAdapter adapter = new SimpleAdapter(this, listData, android.R.layout.simple_list_item_2,
  59. new String[]{NAME, NUMBER},
  60. new int[] {android.R.id.text1, android.R.id.text2});
  61. mListView.setAdapter(adapter);
  62. //爲listView添加事件監聽
  63. mListView.setOnItemSelectedListener(new ListView.OnItemSelectedListener(){
  64. @Override
  65. public void onItemSelected(AdapterView<?> parent, View view,
  66. int position, long id) {
  67. Toast.makeText(getApplicationContext(), "當前所在行爲:"+Long.toString(parent.getSelectedItemId()+1), 1).show();
  68. }
  69. @Override
  70. public void onNothingSelected(AdapterView<?> parent) {
  71. // TODO Auto-generated method stub
  72. }
  73. });
  74. }
  75. }
[java] view plaincopy在CODE上查看代碼片派生到我的代碼片
  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, nullnullnullnull);  
  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.                               nullnull);  
  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. </LinearLayout>
  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. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:orientation="vertical" android:layout_width="fill_parent"
  4. android:layout_height="fill_parent" android:scrollbars="vertical">
  5. <ImageView
  6. android:layout_height="100dip"
  7. android:id="@+id/ItemImage"
  8. android:layout_width="80dip"
  9. android:src="@drawable/png1"
  10. android:layout_gravity="center_horizontal"/>
  11. <TextView
  12. android:layout_width="wrap_content"
  13. android:layout_height="wrap_content"
  14. android:layout_gravity="center"
  15. android:id="@+id/ItemText" />
  16. </LinearLayout>
  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. import java.util.ArrayList;
  3. import java.util.HashMap;
  4. import android.app.Activity;
  5. import android.os.Bundle;
  6. import android.view.Gravity;
  7. import android.view.View;
  8. import android.widget.AdapterView;
  9. import android.widget.GridView;
  10. import android.widget.SimpleAdapter;
  11. import android.widget.Toast;
  12. public class MainActivity extends Activity {
  13. /** Called when the activity is first created. */
  14. //定義圖片整型數組
  15. private int[] mImages={
  16. R.drawable.png1,
  17. R.drawable.png2,
  18. R.drawable.png3,
  19. R.drawable.png4,
  20. R.drawable.png5,
  21. R.drawable.png6,
  22. R.drawable.png7,
  23. R.drawable.png8,
  24. R.drawable.png9
  25. };
  26. @Override
  27. public void onCreate(Bundle savedInstanceState) {
  28. super.onCreate(savedInstanceState);
  29. setContentView(R.layout.main);
  30. //實例化GridView
  31. GridView mGridView=(GridView) findViewById(R.id.gridview);
  32. // 生成動態數組,並且傳入數據
  33. ArrayList<HashMap<String, Object>> lstImageItem = new ArrayList<HashMap<String, Object>>();
  34. for (int i = 0; i < 9; i++) {
  35. HashMap<String, Object> map = new HashMap<String, Object>();
  36. map.put("ItemImage", mImages[i]);// 添加圖像資源的ID
  37. map.put("ItemText""NO." + String.valueOf(i+1));// 按序號做ItemText
  38. lstImageItem.add(map);
  39. }
  40. //構建一個適配器
  41. SimpleAdapter simple = new SimpleAdapter(this, lstImageItem,
  42. R.layout.gridviewitem,
  43. new String[] { "ItemImage""ItemText" }, new int[] {
  44. R.id.ItemImage, R.id.ItemText });
  45. mGridView.setAdapter(simple);
  46. //添加選擇項監聽事件
  47. mGridView.setOnItemClickListener(new GridView.OnItemClickListener(){
  48. @Override
  49. public void onItemClick(AdapterView<?> parent, View view,
  50. int position, long id) {
  51. Toast toast=Toast.makeText(getApplicationContext(), "你選擇了"+(position+1)+"號圖片"1);
  52. toast.setGravity(Gravity.BOTTOM, 00);
  53. toast.show();
  54. }
  55. });
  56. }
  57. }
[java] view plaincopy在CODE上查看代碼片派生到我的代碼片
  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, 00);  
  60.                 toast.show();  
  61.             }  
  62.               
  63.         });  
  64.           
  65.     }  
  66. }  





  • 大小: 42.8 KB
  • 大小: 71.4 KB
  • 大小: 71.9 KB
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章