定义自己的Adapter 显示想要的组件

在Android 做自己毕业设计时,用到一个ListView,要在它里面显示一个TextView,一个RatingBar。但是不管是现有的Adapter没法直接调用给实现,ArrayAdapter<T>, CursorAdapterSimpleAdapter都继承BaseAdapter。所以重写BaseAdapter来实现上述效果。

效果图



package drknow.activity;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

import drknow.vo.Hospital;

import android.app.ListActivity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.RatingBar;
import android.widget.SimpleAdapter;
import android.widget.TextView;

/**
 * 主要用于显示医院简略信息:医院名,患者对医院服务水平的评价星级;
 */
public class SearchHospitalBriefResultsActivity extends ListActivity {
	ListView lv_hospitalBriefInfoList; // 医院简略信息列表;
	// Button btn_queryHospitalDetialInfo;// 点击按钮查看医院详细信息;
	TextView txt_search_hospital_by_name_results_show_hosp_name; // 显示医院简略信息;
	// RatingBar rat_hospitalEvaluate;// 医院评价星级;
	TextView txt_search_hospital_by_name_results_rating;// 医院评价星级;
	ImageView imgBtn_showMap;
	RatingBar rating;

	ArrayList<HashMap<String, Object>> hospitalBriefInfoList = new ArrayList<HashMap<String, Object>>();
	ArrayList<Hospital> hospitalList;

	/** Called when the activity is first created. */
	@SuppressWarnings("unchecked")
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		// setContentView(R.layout.search_hospital_result_listview);
		setTitle("医院简略信息");
		findViews();

		// 获得传来的Hospital List;
		Intent intent = getIntent();
		hospitalList = (ArrayList<Hospital>) intent
				.getSerializableExtra("hospitallist");
		/*
		 * 这一大坨代码是之前想用SimpleAdapter未果。。。 HashMap<String, Object> hMap = null;
		 * 
		 * for (int i = 0; i < hospitalList.size(); i++) { hMap = new
		 * HashMap<String, Object>();
		 * hMap.put("txt_search_hospital_by_name_results_show_hosp_name",
		 * hospitalList.get(i).getHospitalName());
		 * hMap.put("txt_search_hospital_by_name_results_rating", (int)
		 * hospitalList.get(i).getRating() + "星级");
		 * 
		 * hospitalBriefInfoList.add(hMap); }
		 * 
		 * System.out.println(hospitalList.get(0).getRating()); String[] names =
		 * { "txt_search_hospital_by_name_results_show_hosp_name",
		 * "txt_search_hospital_by_name_results_rating" }; int[] ids = {
		 * R.id.txt_search_hospital_by_name_results_show_hosp_name,
		 * R.id.txt_search_hospital_by_name_results_rating };
		 * 
		 * SimpleAdapter sa = new SimpleAdapter(
		 * SearchHospitalBriefResultsActivity.this, hospitalBriefInfoList,
		 * R.layout.search_hospital_result_listview_item, names, ids);
		 */

		MyAdapter sa = new MyAdapter(this, hospitalList);

		setListAdapter(sa);

	}

	/**
	 * 点击某条信息触发事件;将该条对应的医院实例发送到HospitalDetailInfoActivity。
	 */
	@Override
	protected void onListItemClick(ListView l, View v, int position, long id) {
		super.onListItemClick(l, v, position, id);
		Intent intent = new Intent();
		intent.setClass(SearchHospitalBriefResultsActivity.this,
				HospitalDetailInfoActivity.class);
		intent.putExtra("hospitalinfo", hospitalList.get(position));
		startActivity(intent);
	}

	/** 该类所涉及view都在本方法中得到 */
	private void findViews() {
		// 获得ListView;
		// lv_hospitalBriefInfoList = (ListView)
		// findViewById(R.id.lv_search_hospital_by_name_listview);
		// imgBtn_showMap = (ImageView)
		// findViewById(R.id.imgbtn_earch_hospital_by_name_results_show_map);
		// imgBtn_showMap.setImageResource(R.drawable.map_pin);
		// imgBtn_showMap.setVisibility(BIND_AUTO_CREATE);

		txt_search_hospital_by_name_results_rating = (TextView) findViewById(R.id.txt_search_hospital_by_name_results_rating);
		txt_search_hospital_by_name_results_show_hosp_name = (TextView) findViewById(R.id.txt_search_hospital_by_name_results_show_hosp_name);
		// imgBtn_showMap.setImageDrawable(getResources().getDrawable(R.drawable.map_pin));//设置图片来源;
		// rat_hospitalEvaluate = (RatingBar)
		// findViewById(R.id.search_hospital_by_name_results_ratingBar);
		// btn_queryHospitalDetialInfo = (Button)
		// findViewById(R.id.image_button_search_hospital_by_name_results_right);
	}

	/**
	 * 自定义Adapter,配置医院星级,名称,
	 * 
	 * @author BurgenWang
	 * 
	 */
	class MyAdapter extends BaseAdapter {
		private Context context;// 上下文;
		private List<Hospital> list;
		private LayoutInflater mInflater;
		private String[] from;
		private int[] to; // 定位到UI元素;

		private Hospital hosp;

		public MyAdapter(Context context, List<Hospital> dataList) {
			this.mInflater = LayoutInflater.from(context);
			this.list = dataList;
			this.context = context;
		}

		// 这个没用到
		public MyAdapter(Context context, List<Hospital> dataList,
				int resourceid) {
			this.mInflater = LayoutInflater.from(context);
			this.list = dataList;
			this.context = context;
		}

		// 这个也没用到,和上面的构造方法一样,需要修改getView()方法;也就是在getView()中设置;
		public MyAdapter(Context context, List<Hospital> dataList,
				int resourceid, String[] from, int[] to) {
			this.mInflater = LayoutInflater.from(context);
			this.list = dataList;
			this.context = context;
			this.from = from;
			this.to = to;

		}

		@Override
		public int getCount() {
			// TODO Auto-generated method stub
			return hospitalList.size();
		}

		@Override
		public Object getItem(int position) {
			// TODO Auto-generated method stub
			return hospitalList.get(position);
		}

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

		@Override
		public View getView(int position, View convertView, ViewGroup parent) {
			ViewHolder holder = null;

			// 若还没有上次存储的UI元素;
			if (convertView == null) {
				holder = new ViewHolder();

				// 通过LayoutInflater。inflate(R.layout.layoutid)获得布局文件对象;
				convertView = mInflater.inflate(
						R.layout.search_hospital_result_listview_item, null);

				// 将获取的布局文件里的UI元素保存至ViewHolder;
				holder.hospitalName = (TextView) convertView
						.findViewById(R.id.txt_search_hospital_by_name_results_show_hosp_name);
				holder.hospitalRat = (RatingBar) convertView
						.findViewById(R.id.rat_search_hospital_by_name_results_show_rating);

			} else {

				// 通过Tag返回保存在view里的各个UI元素;
				holder = (ViewHolder) convertView.getTag();
			}

			// 将list中的位置为position的Hospital对象取出来
			hosp = list.get(position);

			// 设置医院名
			String hospitalName = hosp.getHospitalName();
			holder.hospitalName.setText(hospitalName);

			// 设置医院评级
			float rating = hosp.getRating();
			holder.hospitalRat.setRating(rating);

			return convertView;
		}

	}

	/**
	 * 存放数据;
	 * 
	 * @author BurgenWang
	 * 
	 */
	class ViewHolder {
		TextView hospitalName;
		RatingBar hospitalRat;
	}

}

 


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值