遺留問題:獲取頭像及其他信息
利用adapter和Cursor來獲取聯系人的姓名和手機號,重在復習之前學過的內容加深自己的理解.
其中需要注意的部分:
1.adapter中的getview的優化問題,用到tag這一屬性
2.onBackPressed()返回方法的重寫,使得程序更加人性化
下面是主要代碼
1.adapter
public class MyAdapter extends BaseAdapter {private List<PhoneInfo> data;private Context context;public MyAdapter(List<PhoneInfo> data,Context context) {this.data = data;this.context = context;}@Overridepublic int getCount() {return data.size();}@Overridepublic PhoneInfo getItem(int position) {return data.get(position);}@Overridepublic long getItemId(int position) {return position;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {phonedemo demo;if (convertView==null) {convertView = LayoutInflater.from(context).inflate(R.layout.cell, null);demo = new phonedemo();demo.name = (TextView) convertView.findViewById(R.id.name);demo.number = (TextView) convertView.findViewById(R.id.number);demo.img = (ImageView) convertView.findViewById(R.id.imageView1);demo.name.setText(data.get(position).getName());demo.number.setText(data.get(position).getNumber());
// demo.img.setImageResource(data.get(position).getId());//利用tag達到循環利用資源convertView.setTag(demo);}else {//利用tag達到循環利用資源demo = (phonedemo) convertView.getTag();demo.name.setText(data.get(position).getName());demo.number.setText(data.get(position).getNumber());
// demo.img.setImageResource(data.get(position).getId());}return convertView;}public static class phonedemo{TextView name,number;ImageView img;}
}
2.獲取聯系人
// 用于存儲封裝的聯系人的集合public static List<PhoneInfo> data = new ArrayList<PhoneInfo>();/*** 獲取聯系人數據,包括名字和號碼,后期添加其他信息* * @param context*/public static void getcontact(Context context) {// getContentResolver()搜索系統的數據庫,query相當于設置搜索條件// 這里是全部搜索Cursor cursor = context.getContentResolver().query(Phone.CONTENT_URI,null, null, null, null);String name;String number;while (cursor.moveToNext()) {// 獲取搜索結果的信息,通過對應的字段值來獲取name = cursor.getString(cursor.getColumnIndex(Phone.DISPLAY_NAME));number = cursor.getString(cursor.getColumnIndex(Phone.NUMBER));// 將獲取的結果加入集合中data.add(new PhoneInfo(name, number));}}
3,返回方法
private long lasttime = 0;@SuppressLint("NewApi")@Overridepublic void onBackPressed() {if (lasttime<=0) {Toast.makeText(this, "再次點擊返回", Toast.LENGTH_SHORT).show();lasttime = System.currentTimeMillis();}else {long currenttime = System.currentTimeMillis();if (currenttime-lasttime<1000) {//帶有動畫的返回finishAfterTransition();}else {Toast.makeText(this, "再次點擊返回", Toast.LENGTH_SHORT).show();lasttime = System.currentTimeMillis();}}}
版權聲明:本文為博主原創文章,未經博主允許不得轉載。