android---简单的通讯录

遗留问题:获取头像及其他信息

利用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;
    }
    @Override
    public int getCount() {
        return data.size();
    }

    @Override
    public PhoneInfo getItem(int position) {
        return data.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public 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")
    @Override
    public 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();
                }
            }
        }

你可能感兴趣的:(手机,通讯录)