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>

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, null, null, null, null);
  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. null, null);
  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. }
package net.csdn.blog.androidtoast;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

import android.app.Activity;
import android.database.Cursor;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.Toast;

public class MainActivity extends Activity {
	
	 ListView     mListView;
	 ArrayList<Map<String, String>> listData;
	     
    static final String NAME = "name";
	static final String NUMBER = "number";
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        getContacts();
    }

    /**
     * 获取联系人列表
     */
	private void getContacts() {
		mListView=(ListView) findViewById(R.id.contacts_list);
		listData = new ArrayList<Map<String, String>>();
		//获取数据库Cursor
		Cursor cur=getContentResolver().query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
		startManagingCursor(cur);
		while (cur.moveToNext()) {
          Map<String, String> mp = new HashMap<String, String>();
          long id = cur.getLong(cur.getColumnIndex("_id"));
		  Cursor pcur = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
			                  null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID + "=" + Long.toString(id), 
		                      null, null);
		          
			            // 处理多个号码的情况
		           String phoneNumbers = "";
		           while (pcur.moveToNext()) {
			               String strPhoneNumber = pcur.getString(pcur.getColumnIndex(
			                       ContactsContract.CommonDataKinds.Phone.NUMBER));
			              phoneNumbers += strPhoneNumber + ":";
			           }
			           phoneNumbers += "\n";
			           pcur.close();
			           
			           String name = cur.getString(cur.getColumnIndex("display_name"));
			           mp.put(NAME, name);
			           mp.put(NUMBER, phoneNumbers);
			           listData.add(mp);
			        }
		 cur.close();
		 
		// 建立一个适配器去查询数据
        ListAdapter adapter = new SimpleAdapter(this, listData, android.R.layout.simple_list_item_2,
               new String[]{NAME, NUMBER},
               new int[] {android.R.id.text1, android.R.id.text2});
        mListView.setAdapter(adapter);
		//为listView添加事件监听
		mListView.setOnItemSelectedListener(new ListView.OnItemSelectedListener(){

			@Override
			public void onItemSelected(AdapterView<?> parent, View view,
					int position, long id) {
				Toast.makeText(getApplicationContext(), "当前所在行为:"+Long.toString(parent.getSelectedItemId()+1), 1).show();
			}

			@Override
			public void onNothingSelected(AdapterView<?> parent) {
				// TODO Auto-generated method stub
				
			}
			
		});
	}
}



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>

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>

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, 0, 0);
  53. toast.show();
  54. }
  55. });
  56. }
  57. }
package net.csdn.blog.androidtoast;

import java.util.ArrayList;
import java.util.HashMap;

import android.app.Activity;
import android.os.Bundle;
import android.view.Gravity;
import android.view.View;
import android.widget.AdapterView;
import android.widget.GridView;
import android.widget.SimpleAdapter;
import android.widget.Toast;

public class MainActivity extends Activity {
    /** Called when the activity is first created. */
	//定义图片整型数组
	private int[] mImages={
			R.drawable.png1,
			R.drawable.png2,
			R.drawable.png3,
			R.drawable.png4,
			R.drawable.png5,
			R.drawable.png6,
			R.drawable.png7,
			R.drawable.png8,
			R.drawable.png9

	};
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        //实例化GridView
        GridView mGridView=(GridView) findViewById(R.id.gridview);
        // 生成动态数组,并且传入数据
        ArrayList<HashMap<String, Object>> lstImageItem = new ArrayList<HashMap<String, Object>>();
        
        for (int i = 0; i < 9; i++) {
            HashMap<String, Object> map = new HashMap<String, Object>();
            map.put("ItemImage", mImages[i]);// 添加图像资源的ID
            map.put("ItemText", "NO." + String.valueOf(i+1));// 按序号做ItemText
            lstImageItem.add(map);
        }
        //构建一个适配器
        SimpleAdapter simple = new SimpleAdapter(this, lstImageItem,
                R.layout.gridviewitem,
                new String[] { "ItemImage", "ItemText" }, new int[] {
                        R.id.ItemImage, R.id.ItemText });
        mGridView.setAdapter(simple);
        //添加选择项监听事件
        mGridView.setOnItemClickListener(new GridView.OnItemClickListener(){

			@Override
			public void onItemClick(AdapterView<?> parent, View view,
					int position, long id) {
				Toast toast=Toast.makeText(getApplicationContext(), "你选择了"+(position+1)+"号图片", 1);
				toast.setGravity(Gravity.BOTTOM, 0, 0);
				toast.show();
			}
        	
        });
        
    }
}





  • 大小: 42.8 KB
  • 大小: 71.4 KB
  • 大小: 71.9 KB

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值