listview中button响应事件

1.项目中要完成一个类似ireader书架页面,没能从新自定控件,就用了listview来实现,效果如下:

               

2.实现方式:

  1》加载布局文件

/* 所有课程的视图 */
	public void goToAllCoursesView() {
		setContentView(R.layout.home);
		this.commonView("所有课程", HOME_VIEW, R.id.home_page, null);
		ListView lv_all_courses = (ListView) findViewById(R.id.lv_all_courses);
		AllCoursesAdapter aclAdapter = new AllCoursesAdapter(HomeActivity.this, TestData.all_courses_image,new KindOfOnclickListener() {
			public void mOnClick(HashMap<String, Object> params) {// item中控件的事件响应
				int image_src = (Integer) params.get("image_src");
				if (image_src==R.drawable.course_gccl) {
					Log.d("course", "这是工程测量课程-->" + R.drawable.course_gccl);
					commonParams = new HashMap<String, Object>();
					commonParams.put("course_name", "工程测量");
					commonSendMessage(COURSE_DETAIL_VIEW, commonParams);
				}
			}
		});
		lv_all_courses.setAdapter(aclAdapter);
		aclAdapter.notifyDataSetChanged();
	}
  2》listview的adapter:

public class AllCoursesAdapter extends BaseAdapter{

	private Context context;
	private int[] all_course_image;
	private int rows = 0;
	private KindOfOnclickListener mOnclickListener;
	private ImageView course01, course02, course03, course04, course05;

	public AllCoursesAdapter(Context context, int[] all_course_image, KindOfOnclickListener mOnclickListener) {
		this.context = context;
		this.all_course_image = all_course_image;
		this.mOnclickListener = mOnclickListener;
		rows = (all_course_image.length % TestData.one_row_items == 0 ? all_course_image.length / TestData.one_row_items : all_course_image.length / TestData.one_row_items + 1);
	}

	public int getCount() {
		return rows;
	}

	public Object getItem(int position) {
		// TODO Auto-generated method stub
		return null;
	}

	public long getItemId(int position) {
		// TODO Auto-generated method stub
		return position;
	}

	public View getView(final int position, View convertView, ViewGroup parent) {
		if (convertView == null) {
			convertView = LayoutInflater.from(context).inflate(R.layout.course_item, null);
		}
		Log.i("position", "position-->" + position + "----rows-->" + rows);
		course01 = (ImageView) convertView.findViewById(R.id.iv_01);
		course02 = (ImageView) convertView.findViewById(R.id.iv_02);
		course03 = (ImageView) convertView.findViewById(R.id.iv_03);
		course04 = (ImageView) convertView.findViewById(R.id.iv_04);
		course05 = (ImageView) convertView.findViewById(R.id.iv_05);
		final HashMap<String, Object> params = new HashMap<String, Object>();
		course01.setOnClickListener(new OnClickListener() {
			public void onClick(View v) {
				params.put("image_src", all_course_image[position * TestData.one_row_items + 0]);
				mOnclickListener.mOnClick(params);
			}
		});
		course02.setOnClickListener(new OnClickListener() {
			public void onClick(View v) {
				params.put("image_src", all_course_image[position * TestData.one_row_items +1]);
				mOnclickListener.mOnClick(params);
			}
		});
		course03.setOnClickListener(new OnClickListener() {
			public void onClick(View v) {
				params.put("image_src", all_course_image[position * TestData.one_row_items +2]);
				mOnclickListener.mOnClick(params);
			}
		});
		course04.setOnClickListener(new OnClickListener() {
			public void onClick(View v) {
				params.put("image_src", all_course_image[position * TestData.one_row_items +3]);
				mOnclickListener.mOnClick(params);
			}
		});
		course05.setOnClickListener(new OnClickListener() {
			public void onClick(View v) {
				params.put("image_src", all_course_image[position * TestData.one_row_items +4]);
				mOnclickListener.mOnClick(params);
			}
		});

		if (position < rows - 1) {
			Log.i("position", "该行填满5本书");
			commonHandler(position);
		} else {// 最后一行
			if (all_course_image.length % TestData.one_row_items == 0) {// 如果正好整除
				Log.i("position", "最后一行是5本书");
				commonHandler(position);
			} else {// 如果不是整除的
				int yushu = all_course_image.length - position * TestData.one_row_items;
				Log.i("position", "最后一行是" + yushu + "本书");
				showImage(yushu, position);
			}
		}

		return convertView;
	}

	/* Listview一行刚好被填满的处理 */
	private void commonHandler(int position) {
		int index = 0;
		course01.setVisibility(View.VISIBLE);
		course02.setVisibility(View.VISIBLE);
		course03.setVisibility(View.VISIBLE);
		course04.setVisibility(View.VISIBLE);
		course05.setVisibility(View.VISIBLE);
		
		course01.setImageResource(all_course_image[position * TestData.one_row_items + index]);
		index++;
		
		course02.setImageResource(all_course_image[position * TestData.one_row_items + index]);
		index++;
		
		course03.setImageResource(all_course_image[position * TestData.one_row_items + index]);
		index++;
		
		course04.setImageResource(all_course_image[position * TestData.one_row_items + index]);
		index++;
		
		course05.setImageResource(all_course_image[position * TestData.one_row_items + index]);

		index = 0;
	}

	/* Listview一行没有被填满的处理 */
	private void showImage(int yushu, int position) {
		switch (yushu) {
		case 1:
			course01.setVisibility(View.VISIBLE);
			course01.setImageResource(all_course_image[position * TestData.one_row_items + 0]);
			break;
		case 2:
			course01.setVisibility(View.VISIBLE);
			course02.setVisibility(View.VISIBLE);
			course01.setImageResource(all_course_image[position * TestData.one_row_items + 0]);
			course02.setImageResource(all_course_image[position * TestData.one_row_items + 1]);
			break;
		case 3:
			course01.setVisibility(View.VISIBLE);
			course02.setVisibility(View.VISIBLE);
			course03.setVisibility(View.VISIBLE);
			course01.setImageResource(all_course_image[position * TestData.one_row_items + 0]);
			course02.setImageResource(all_course_image[position * TestData.one_row_items + 1]);
			course03.setImageResource(all_course_image[position * TestData.one_row_items + 2]);
			break;
		case 4:
			course01.setVisibility(View.VISIBLE);
			course02.setVisibility(View.VISIBLE);
			course03.setVisibility(View.VISIBLE);
			course04.setVisibility(View.VISIBLE);
			course01.setImageResource(all_course_image[position * TestData.one_row_items + 0]);
			course02.setImageResource(all_course_image[position * TestData.one_row_items + 1]);
			course03.setImageResource(all_course_image[position * TestData.one_row_items + 2]);
			course04.setImageResource(all_course_image[position * TestData.one_row_items + 3]);
			break;
		}
	}

}

   3》控件响应事件的回调接口:

public interface KindOfOnclickListener {
	public void mOnClick(HashMap<String, Object> params);
}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值