【达内课程】联系人项目(显示联系人数据)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010356768/article/details/84987718

在这里插入图片描述
创建ContactAdapter

public class ContactAdapter extends BaseAdapter {
    private Context context;
    private List<Contact> contacts;
    private LayoutInflater inflater;

    public ContactAdapter(Context context, List<Contact> contacts) {
        this.context = context;
        this.contacts = contacts;
        this.inflater = LayoutInflater.from(context);
    }

    @Override
    public int getCount() {
        return contacts.size();
    }

    @Override
    public Contact getItem(int i) {
        return contacts.get(i);
    }

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

    @Override
    public View getView(int i, View view, ViewGroup viewGroup) {
        ViewHolder viewHolder = null;
        if(view == null){
            view = inflater.inflate(R.layout.item_contact,null);
            viewHolder = new ViewHolder();
            viewHolder.circleImageView = view.findViewById(R.id.circleImageView);
            viewHolder.textView = view.findViewById(R.id.textView);
            view.setTag(viewHolder);
        }

        viewHolder = (ViewHolder) view.getTag();

        //设置参数
        Contact contact = getItem(i);
        viewHolder.textView.setText(contact.getName());
        Bitmap bitmap = BitmapUtils.getPhoto(contact.getPhotoId());
        if(bitmap != null){
            viewHolder.circleImageView.setImageBitmap(bitmap);
        }else {
            viewHolder.circleImageView.setImageResource(R.mipmap.contact);
        }
        return view;
    }

    class ViewHolder{
        CircleImageView circleImageView;
        TextView textView;
    }
}

其中item_contact

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    tools:context=".activity.MainActivity"
    android:orientation="vertical"
    android:gravity="center"
    >

    <com.example.xx.contactapplication.ui.CircleImageView
        android:id="@+id/circleImageView"
        android:layout_width="60dp"
        android:layout_height="60dp"
        android:src="@mipmap/contact"/>

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="联系人姓名"/>

</LinearLayout>

其中圆形头像用的CircleImageView,可以直接把Github项目中的CircleImageView.java和res下的attrs复制到项目中用即可
https://github.com/hdodenhof/CircleImageView

要显示头像,我们需要创建工具类BitmapUtils

public class BitmapUtils {
    //缓存
    private static HashMap<Integer,SoftReference<Bitmap>> cache = new HashMap<Integer,SoftReference<Bitmap>>();

    public static Bitmap getPhoto(int photoId) {


        //photoId关联data表的"_id"
        //头像在data15里
        Bitmap bitmap = null;
        //如果没有头像
        if(photoId == 0){
            return null;
        }
        //先去缓存中找找,有没有加载过的缓存
        SoftReference<Bitmap> ref = cache.get(photoId);
        if(ref!=null){
            bitmap = ref.get();
            if(bitmap!=null){
                return bitmap;
            }
        }
        ContentResolver r = Myapplication.getApp().getContentResolver();
        Uri dataUri = ContactsContract.Data.CONTENT_URI;
        String[] columns = {ContactsContract.Data.DATA15};
        String selection = ContactsContract.Data._ID+"=?";
        String[] selectionArgs = {photoId+""};
        Cursor c = r.query(dataUri, columns, selection, selectionArgs, null);
        if(c.moveToNext()){
            byte[] bytes = c.getBlob(0);
            bitmap = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
            cache.put(photoId,new SoftReference<Bitmap>(bitmap));
        }
        c.close();
        return bitmap;
    }
}

ContactFragment

public class ContactFragment extends Fragment implements IContactView{
    private List<Contact> list;
    private IContactPresenter presenter;
    private ContactAdapter adapter;
    private GridView gridView;

    public ContactFragment() {
        this.presenter = new ContactPresenterImpl(this);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        //调用presenter方法,记载所有联系人
        presenter.loadAllContacts();
        View view = inflater.inflate(R.layout.fragment_contactfragment,null);
        //初始化控件
        setViews(view);
        return view;
    }

    private void setViews(View view) {
        gridView = view.findViewById(R.id.gridView);
    }

    @Override
    public void setData(List<Contact> list) {
        this.list = list;
    }

    @Override
    public void showList() {
        //自定义adapter 更新界面
        //Log.d("contact_info",list.toString());
        adapter = new ContactAdapter(getActivity(),list);
        gridView.setAdapter(adapter);
    }
}

猜你喜欢

转载自blog.csdn.net/u010356768/article/details/84987718