Android-类qq功能(三)

   在上篇博客中,给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();
	}

	@Override
	public int getCount() {
		return list.size();// list的行数
	}

	@Override
	public Object getItem(int arg0) {
		return null;
	}

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

	@Override
	public 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点击事件
		@Override
		public 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);//进入MessageChatActivity
			v.getContext().startActivity(intent);
		}
	}

}

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

运行效果:


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值