Android-类qq功能(三)

来源:互联网 发布:网络出现问号 编辑:程序博客网 时间:2024/05/22 12:07

   在上篇博客中,给listview填充值用到了Message_RelationAdapter

     

 这个类的作用就是给listview赋值:

  

/**联系人列表的adapter * 创建时间:2015年11月5日 * 版本:v1.0 * @author liushuo */package com.jrkj.adapter;import java.util.ArrayList;import java.util.HashMap;import com.jrkj.ui.MessageChatActivity;import com.jrkj.ui.R;import com.nostra13.universalimageloader.core.DisplayImageOptions;import com.nostra13.universalimageloader.core.ImageLoader;import android.content.Context;import android.content.Intent;import android.graphics.Bitmap;import android.view.LayoutInflater;import android.view.View;import android.view.View.OnClickListener;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.ImageView;import android.widget.TextView;public class Message_RelationAdapter extends BaseAdapter {private Context context = null;private int resources;private ArrayList<HashMap<String, Object>> list = null;private String[] from;private int[] to;private DisplayImageOptions options;public Message_RelationAdapter(Context context, int resources,ArrayList<HashMap<String, Object>> list, String[] from, int[] to) {super();this.context = context;this.resources = resources;this.list = list;this.from = from;this.to = to;// 图片的缓存初始化options = new DisplayImageOptions.Builder().showImageOnLoading(R.drawable.ic_launcher)/* 加载图片的时候显示正在加载的图 */.showImageOnFail(R.drawable.ic_launcher)/* 加载图片失败后显示这个张图 */.cacheInMemory(true)/* 缓存至内存 */.cacheOnDisk(true)/* 缓存值SDcard */.bitmapConfig(Bitmap.Config.RGB_565).build();}@Overridepublic int getCount() {return list.size();// list的行数}@Overridepublic Object getItem(int arg0) {return null;}@Overridepublic long getItemId(int itemid) {return itemid;}@Overridepublic View getView(int position, View convertView, ViewGroup arg2) {/** * 首先判断是不是第一次创建Item,若是,则创建convertView实例和ViewHolder对象,并通过fandViewById()方法 * 获得每一行中所有空间的实例放在ViewHolder对象中,然后对convertView设置标签 */ViewHolder viewHolder = null;// 注意convertView不是随意创建的,需要有LayoutInflater,根据list_item布局文件创建if (convertView == null) {LayoutInflater inflater = LayoutInflater.from(context);convertView = inflater.inflate(resources, null); // 这里的null是一个ViewGroup形参,基本用不上viewHolder = new ViewHolder(convertView);convertView.setTag(viewHolder);} else {viewHolder = (ViewHolder) convertView.getTag(); // 通过getTag()方法获得附加信息}//绑定图片,缓存ImageLoader.getInstance().displayImage(list.get(position).get(from[0]).toString(), viewHolder.ctPhoto,options);viewHolder.ctName.setText((String) (list.get(position).get(from[1])));//name绑定数据viewHolder.ctSign.setText((String) (list.get(position).get(from[2])));//标签绑定数据//图片点击事件,进入聊天viewHolder.ctPhoto.setOnClickListener(new ImageListener(position));return convertView; // 把这个每一行的View对象返回}/** * getView方法为系统在绘制每一行时调用,在此方法中要设置需要显示的文字,图片, 以及为按钮设置监听器。 *  * 形参意义: *position:当前绘制的item 的位置(ID); * convertView,系统在绘制ListView时,如果是绘制第一个Item(即第一行),convertView为null,当 * 绘制第二个及以后的Item的convertView不为空,这时可以直接利用这个convertView的getTag()方法,获得各控件 * 的实例,并进行相应的设置,这样可以加快绘图速度。 *  * 为了为convertView设置附加信息Tag,这里创建一个内部类ViewHolder,用于盛放一行中所有控件的引用,将*这些引用 * 实例化后作为convertView的附加信息。 */class ViewHolder {public ImageView ctPhoto = null;public TextView ctName = null;public TextView ctSign = null;// 从这里可以看出,from和to数组彼此之间的元素应该一一对应,同时from和to各自元素内部的顺序不同,最后ListView// 呈现的位置也会不同!//获取控件实例public ViewHolder(View convertView) {//根据activity中获取的控件id获取实例 ctPhoto = (ImageView) convertView.findViewById(to[0]);ctName = (TextView) convertView.findViewById(to[1]);ctSign = (TextView) convertView.findViewById(to[2]);}}//头像点击事件class ImageListener implements OnClickListener {private int position;public ImageListener(int position) {this.position = position;}// listItem点击事件@Overridepublic void onClick(View v) {String photoRes=list.get(position).get(from[0]).toString();String strName = list.get(position).get(from[1]).toString();//Toast.makeText(context, strName + " is Clicked", Toast.LENGTH_LONG).show();Intent intent = new Intent();intent.putExtra("photoRes", photoRes);intent.putExtra("strName", strName);intent.setClass(v.getContext(), MessageChatActivity.class);//进入MessageChatActivityv.getContext().startActivity(intent);}}}

创建好了adapter,就可以在activity中调用,然后填充了listview

运行效果:


0 0