使用ListView,SimpleAdapter及CheckBox的心得

這兩天無聊的時候突然想到過年短信羣發的問題,直接羣發短信別人收到了肯定不會有什麼感覺,但是如果在短信的前面加上每個的名字,那麼收短信的人肯定不會是覺得你在羣發短信,因此我就想到了做這樣一簡單的應用,在短信的前面加上每個收信人的姓名,這裏的收信人全部從聯繫人中選取。在聯繫人的選取界面是一個簡單的listview,其中每個條目有三個組件,第一個是checkbox用來選取其所在的聯繫人,後面兩個是textview分別用來顯示聯繫人的姓名和號碼。下面是實現的代碼

package com.example.myownmessage;

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

import com.example.service.ContactsInfo;
import com.example.valuebean.People;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.Toast;
import android.view.ViewGroup;

public class ListContacts extends Activity {
	private CheckBox checkbox = null;
	private Button done = null;
	
	private ArrayList<People> groups = null; //將聯繫人對象也組成了一個數組
	private ArrayList<String> names = new ArrayList<String>();
	private ArrayList<String> numbers = new ArrayList<String>(); 
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.listcontacts);
	
		checkbox = (CheckBox)this.findViewById(R.id.check);
		done = (Button)this.findViewById(R.id.done);
		
		ListView list = (ListView) this.findViewById(R.id.list);
		ArrayList<Map<String,Object>> items = new ArrayList<Map<String,Object>>();
		
		ContactsInfo info = new ContactsInfo(this);
		info.getAllContacts();
		groups = info.getContactsGroup();
		
		for(int i = 0 ; i < groups.size();i++){
			Map<String,Object> listitem = new HashMap<String,Object>();
			listitem.put("name",groups.get(i).getName());
			listitem.put("number",groups.get(i).getNumber());
			listitem.put("isSelected", groups.get(i).isSelected());
			items.add(listitem);
		}
		
		SimpleAdapter adapter = new SimpleAdapter(this,items,R.layout.item,new String []{"isSelected","name","number"},new int[]

{R.id.check,R.id.name,R.id.number}){
			
			@Override  
			public View getView(final int position, View convertView, ViewGroup parent) {
				View view = super.getView(position, convertView, parent);
				@SuppressWarnings("unchecked")
				final HashMap<String,Object> map = (HashMap<String, Object>) this.getItem(position);
				//獲取相應View中的Checkbox對象
				CheckBox checkBox = (CheckBox)view.findViewById(R.id.check);
				checkBox.setChecked((Boolean) map.get("isSelected"));
				//添加單擊事件,在map中記錄狀態
				//通過判斷checkbox是否被選中來確定聯繫人是否被放在names和numbers兩個數組中。
					
				checkBox.setOnClickListener(new View.OnClickListener() {
					@Override
					public void onClick(View view) {
						map.put("isSelected", ((CheckBox)view).isChecked());
						if(((CheckBox)view).isChecked()){
							Toast.makeText(ListContacts.this,"選中了"+ map.get("name"), 0).show();
							names.add((String) map.get("name"));
							numbers.add((String) map.get("number"));
						}else{
							names.remove(map.get("name"));
							numbers.remove(map.get("number"));
							}
						
					}
				});
				return view;
			}
			
			
			
			
			
		};
		list.setAdapter(adapter);
		
		
		
		
		done.setOnClickListener(new OnClickListener(){

			@Override
			public void onClick(View v) {
				Intent intent = new Intent();
				
				Bundle  bundle = new Bundle();
				bundle.putStringArrayList("names", names);
				bundle.putStringArrayList("numbers", numbers);
				intent.putExtra("data", bundle);
				
				ListContacts.this.setResult(200,intent);//將選擇結果返回給上一個activity
				ListContacts.this.finish();
			}});
		
	
		
	}
	
	
	
	
}
上面這段代碼最爲核心的就是自己構建了simpleadapter,並且重寫了它的的getView方法,在這個方法裏面爲checkbox添加了監聽器,當checkbox被選中的時候,將聯繫人的信息放進姓名和電話號碼的list裏面。

在完成這段代碼之前,我也查看了很多其他人的博客,現在也慢慢的理解了一部分。被重寫的getView方法它在什麼時候調用的呢?就是在每一次item從屏幕外滑進屏幕內的時候,或者程序剛開始的時候創建第一屏item的時候。因此爲每一個checkbox都註冊了監聽器,其中的參數ViewGroup parent 就是你設置adapter的那個組件裏面封裝一個viewGroup用來盛放item,position就是你選擇的 item的第幾條從0開始,convertView就是item上的佈局layout或者組件。


發佈了31 篇原創文章 · 獲贊 31 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章