在Android 做自己毕业设计时,用到一个ListView,要在它里面显示一个TextView,一个RatingBar。但是不管是现有的Adapter没法直接调用给实现,ArrayAdapter<T>, CursorAdapter, SimpleAdapter都继承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;
}
}