现在的位置: 首页 > 综合 > 正文

Android入门进阶教程(6)-常用组件 ListView、GridView

2018年04月05日 ⁄ 综合 ⁄ 共 7872字 ⁄ 字号 评论关闭

 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, 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.           
  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, 00);  
  60.                 toast.show();  
  61.             }  
  62.               
  63.         });  
  64.           
  65.     }  
  66. }  

 

 

抱歉!评论已关闭.