android 带两个点击按钮适配器+列表显示
2016-06-10 22:50
309 查看
其实适配器还是蛮常用的,最近在写健康管家,实现一个医生列表用到了一个比较复杂的带两个点击事件的适配器i,因为我的android studio他实在是要卡死了,所以我很在很痛苦的等待,顺便来做个总结。我等的好痛苦,为什么as运行一下gradle building要那么久,崩溃!!
要填充一个漂亮的数组,首先需要一个容器listview+和一个装在容器里面的item的样式(adapter).
效果图
(为什么这个图片上传有问题哇)
一、有按钮点击功能的适配器
- DoctorListActivity.java (显示列表)
这个java类的主界面包含了一个填充容器list(xml代码很简单就不贴了),继承ListItemClickHelp是为了实现列表中每一行的按钮点击事件
public class DoctorListActivity extends Activity implements ListItemClickHelp{ private static final String results = "{\n" + " \"error\": false,\n" + " \"results\": [\n" + " {\n" + " \"id\": \"1\",\n" + " \"illness_name\":\"神经外科\",\n" + " \"doctor_name\":\"刘如恩\",\n" + " \"hospital_name\":\"中日友好医院\",\n" + " \"head_image\":\"http://xs3.op.xywy.com/api.iu1.xywy.com/zhuanjia/20151112/6c09a9083f0817f371fc9d5576c24d6c67855_a.jpg\",\n" + " \"personal_website\":\"http://z.xywy.com/doc/liuruen\",\n" + " \"doctor_intro\":\"擅长:特别擅长对面肌痉挛、三叉神经痛、舌咽神经痛、癫痫外科治疗、各种颅内肿瘤特别是颅咽管瘤及巨大垂体腺瘤的全切、听神经瘤的显微外科治疗有较为深入的研究\"\n" + " },\n" + " {\n" + " \"id\": \"2\",\n" + " \"illness_name\":\"神经外科\",\n" + " \"doctor_name\":\"李维新\",\n" + " \"hospital_name\":\"唐都医院\",\n" + " \"head_image\":\"http://static.i2.xywy.com/zhuanjia/20141218/4d93512af31c4415f03e5aba6f5d1a4c19898_a.jpg\",\n" + " \"personal_website\":\"http://z.xywy.com/doc/liweixindr\",\n" + " \"doctor_intro\":\"擅长:脑内肿瘤(胶质瘤、垂体瘤、脑膜瘤、颅咽管瘤、听神经瘤等),脊髓肿瘤、脊髓空洞、小脑扁桃体下疝、颅底畸形、脊柱裂,脊髓栓系综合征、脑积水等。\"\n" + " },\n" + " {\n" + " \"id\": \"3\",\n" + " \"illness_name\":\"神经外科\",\n" + " \"doctor_name\":\"贾栋\",\n" + " \"hospital_name\":\"唐都医院\",\n" + " \"head_image\":\"http://static.i2.xywy.com/zhuanjia/20140923/26497696a37e21832099b95cbdb44da057600_a.jpg\",\n" + " \"personal_website\":\"http://z.xywy.com/doc/xajiadong\",\n" + " \"doctor_intro\":\"擅长:擅长颅内肿瘤、颅底肿瘤、脊髓肿瘤的显微神经外科手术。对颅神经疾病(三叉神经痛面肌抽搐及痉挛舌咽神经痛)手术治疗也具有较高水平。尤其专长于神经内窥镜微创治疗脑积水脑室肿瘤及不开颅经蝶切除垂体瘤。长期从事脑肿瘤、颅脑外伤、脊柱脊髓疾病的治疗和研究工作\"\n" + " },\n" + " {\n" + " \"id\": \"4\",\n" + " \"illness_name\":\"神经外科\",\n" + " \"doctor_name\":\"王学廉\",\n" + " \"hospital_name\":\"唐都医院\",\n" + " \"head_image\":\"http://static.i2.xywy.com/zhuanjia/20140610/cfcb95f05cd02371285039d94e7743a377139_a.jpg\",\n" + " \"personal_website\":\"http://z.xywy.com/doc/wangxuelian\",\n" + " \"doctor_intro\":\"擅长:帕金森病、抽动秽语综合征、抽动症、肌张力障碍、难治性精神病、吸毒成瘾、酒精依赖、顽固性疼痛、脑瘫、三叉神经痛、面肌痉挛、扭转痉挛、痉挛性斜颈、舞蹈症、特发性震颤等功能性脑疾病。\"\n" + " },\n" + " {\n" + " \"id\": \"5\",\n" + " \"illness_name\":\"神经外科\",\n" + " \"doctor_name\":\"赵振伟\",\n" + " \"hospital_name\":\"唐都医院\",\n" + " \"head_image\":\"http://static.i2.xywy.com/zhuanjia/20150925/a400aacf87a3bd3e9cf1d38a0728351166131_a.jpg\",\n" + " \"personal_website\":\"http://z.xywy.com/doc/zhaozhenweidr\",\n" + " \"doctor_intro\":\"擅长:出血和缺血性脑卒中的介入治疗,包括脑动脉瘤、脑动静脉畸形、动静脉瘘、颈内动脉海绵窦瘘、肿瘤术前栓塞、胶质瘤化疗、颅内及颈动脉狭窄等各类检查和治疗。\"\n" + " },\n" + " {\n" + " \"id\": \"6\",\n" + " \"illness_name\":\"神经外科\",\n" + " \"doctor_name\":\"骆纯\",\n" + " \"hospital_name\":\"上海长征医院\",\n" + " \"head_image\":\"http://static.i2.xywy.com/zhuanjia/20141231/d875ad05766c59932cc11f892570c9ca94192_a.jpg\",\n" + " \"personal_website\":\"http://z.xywy.com/doc/luocdr\",\n" + " \"doctor_intro\":\"擅长:垂体瘤、脑膜瘤、胶质瘤、听神经瘤、颅底肿瘤、脊髓肿瘤、三叉神经痛、面肌痉挛的微创手术,脑积水、颅骨整形、脊髓空洞的综合治疗。\"\n" + " },\n" + " {\n" + " \"id\": \"7\",\n" + " \"illness_name\":\"神经外科\",\n" + " \"doctor_name\":\"郭宗泽\",\n" + " \"hospital_name\":\"中国医科大学附属第一医院\",\n" + " \"head_image\":\"http://static.i2.xywy.com/zhuanjia/20150625/ac04fca5b201c7c713497c938f2e21a232590_a.jpg\",\n" + " \"personal_website\":\"http://z.xywy.com/doc/guozongze\",\n" + " \"doctor_intro\":\"擅长:擅长复杂脑胶质瘤诊断、手术及综合治疗;听神经瘤全切手术、垂体瘤、复杂血管畸形和血管瘤等治疗。\"\n" + " },\n" + " {\n" + " \"id\": \"8\",\n" + " \"illness_name\":\"神经外科\",\n" + " \"doctor_name\":\"江荣才\",\n" + " \"hospital_name\":\"天津医科大学总医院\",\n" + " \"head_image\":\"http://static.i2.xywy.com/zhuanjia/20140611/192a31eeebfcf3ff97853929e4967e8169071_a.jpg\",\n" + " \"personal_website\":\"http://z.xywy.com/doc/jiangrongcai\",\n" + " \"doctor_intro\":\"擅长:慢性硬膜下血肿(保守治疗、无痛苦、副作用少,已治愈多例患者);难治性颅咽管瘤(囊性颅咽管瘤立体定向囊内放疗+放疗,15年随访未复发);重型颅脑伤:综合治疗重型颅脑损伤效果好。擅长重症感染、颅内高压救治。\"\n" + " },\n" + " {\n" + " \"id\": \"9\",\n" + " \"illness_name\":\"神经外科\",\n" + " \"doctor_name\":\"贺晓生\",\n" + " \"hospital_name\":\"西京医院\",\n" + " \"head_image\":\"http://static.i2.xywy.com/zhuanjia/20150623/9b9eb5a2b8306249b1c698536dd18baa8732_a.jpg\",\n" + " \"personal_website\":\"http://z.xywy.com/doc/hexiaosheng\",\n" + " \"doctor_intro\":\"擅长:颅内肿瘤:神经胶质瘤 颅咽管瘤 脑膜瘤,听神经瘤,经鼻孔切除垂体瘤 显微镜下精准切除颅底肿瘤 新生儿脑积水 成人脑积水 颅脑肿瘤,颅内囊肿的治疗。\"\n" + " },\n" + " {\n" + " \"id\": \"10\",\n" + " \"illness_name\":\"神经外科\",\n" + " \"doctor_name\":\"尹龙\",\n" + " \"hospital_name\":\"天津市环湖医院\",\n" + " \"head_image\":\"http://static.i2.xywy.com/zhuanjia/20140611/dceb9bf0bc35b3bc92b096927f98816c29242_a.jpg\",\n" + " \"personal_website\":\"http://z.xywy.com/doc/dryinlong\",\n" + " \"doctor_intro\":\"擅长:脑血管病的介入治疗。\"\n" + " },\n" + " {\n" + " \"id\": \"11\",\n" + " \"illness_name\":\"神经外科\",\n" + " \"doctor_name\":\"杭春华\",\n" + " \"hospital_name\":\"南京军区总院\",\n" + " \"head_image\":\"http://static.i2.xywy.com/zhuanjia/20140819/317509b6190d57aab8b636c248b48e8f49012_a.jpg\",\n" + " \"personal_website\":\"http://z.xywy.com/doc/hang1965\",\n" + " \"doctor_intro\":\"擅长:脑血管疾病的手术治疗,包括动脉瘤、脑血管畸形、烟雾病及缺血性脑血管病的外科治疗;颅内肿瘤的外科治疗,包括颅底肿瘤、脑干肿瘤、鞍区肿瘤等复杂病变;颅脑外伤的综合治疗;椎管内肿瘤和颅颈交界区畸形;颅脑先天性疾患的诊治\"\n" + " },\n" + " {\n" + " \"id\": \"12\",\n" + " \"illness_name\":\"神经外科\",\n" + " \"doctor_name\":\"吴安华\",\n" + " \"hospital_name\":\"中国医科大学附属第一医院\",\n" + " \"head_image\":\"http://static.i2.xywy.com/zhuanjia/20140711/01172591bd115bfda33ef8d01382690328887_a.jpg\",\n" + " \"personal_website\":\"http://z.xywy.com/doc/wuanhua\",\n" + " \"doctor_intro\":\"擅长:神经系统肿瘤的诊断与治疗,颅底手术(垂体瘤,听神经瘤,及其他侵袭颅底的疾病),胶质瘤综合治疗(手术,放化疗及生物治疗),微创神经内镜手术(脑积水,垂体瘤,颅底肿瘤),脊柱固定及椎管内肿瘤等。\"\n" + " }\n" + " ]\n" + "}"; ImageButton iv_back; ListView lv_doctors; List<Doctor> doctors=new ArrayList<Doctor>(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); // setContentView(R.layout.activity_doctor_list); initview(); initData(); } private void initview() { setContentView(R.layout.activity_doctor_list); iv_back= (ImageButton) findViewById(R.id.ib_back); lv_doctors= (ListView) findViewById(R.id.lv_doctors); } private void initData() { Gson gson = new Gson(); Type userType = new TypeToken<ResponseResult<List<Doctor>>>() { }.getType(); ResponseResult<List<Doctor>> result = gson.fromJson(results, userType); doctors = result.getResults(); final DoctorListAdapter doctorListAdapter = new DoctorListAdapter(DoctorListActivity.this, (ArrayList<Doctor>) doctors,this); lv_doctors.setAdapter(doctorListAdapter); lv_doctors.setSelection(0); //返回 iv_back.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { finish(); } }); } @Override public void onClick(View item, View widget, int position, int which) { Doctor doctor=doctors.get(position); switch (which){ //医生详情页 case R.id.rl_detail: Intent intent=new Intent(DoctorListActivity.this,DoctorDetailActivity.class); // Toast.makeText(DoctorListActivity.this,"详情页",Toast.LENGTH_LONG).show(); Doctor doctor1=doctors.get(position); Bundle data=new Bundle(); data.putSerializable("doctor", (Serializable) doctor1); intent.putExtras(data); startActivity(intent); break; case R.id.rl_personal_web: Intent intent1 = new Intent(Intent.ACTION_VIEW); intent1.setData(Uri.parse(doctor.getPersonal_website())); startActivity(intent1); break; } } }
- ListItemClickHelp.java(实现点击的接口)
public interface ListItemClickHelp { void onClick(View item, View widget, int position, int which); }
- DoctorListAdapter.java(适配器)
简单来说适配器里面包含的就是待显示列表每一行的样式,用于填充列表的数组(简单string或者对象型数组)
public class DoctorListAdapter extends BaseAdapter { private Context context; private ArrayList<Doctor> doctors; public ListItemClickHelp callback; private LayoutInflater mInflater; public DoctorListAdapter(Context context, ArrayList<Doctor> doctors, ListItemClickHelp callback) { this.context = context; this.doctors = doctors; this.callback = callback; } @Override public int getCount() { return doctors.size(); } @Override public Object getItem(int position) { return null; } @Override public long getItemId(int position) { return 0; } @Override public View getView(int position, View convertView, final ViewGroup parent) { mInflater = (LayoutInflater) context .getSystemService(Context.LAYOUT_INFLATER_SERVICE); ViewHolder holder; if (convertView == null) { convertView = mInflater.inflate( R.layout.list_doctor_item, null); holder = new ViewHolder(); holder.tv_name = (TextView) convertView .findViewById(R.id.tv_name); holder.tv_hospital = (TextView) convertView .findViewById(R.id.tv_hospital); holder.tv_illness = (TextView) convertView .findViewById(R.id.tv_illness); holder.tv_intro = (TextView) convertView .findViewById(R.id.tv_intro); holder.iv_head = (ImageView) convertView .findViewById(R.id.iv_head); holder.rl_detail= (RelativeLayout) convertView .findViewById(R.id.rl_detail); holder.rl_personal_web= (RelativeLayout) convertView .findViewById(R.id.rl_personal_web); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } holder.tv_name.setText(doctors.get(position).getDoctor_name()); holder.tv_hospital.setText(doctors.get(position).getHospital_name()); holder.tv_illness.setText(doctors.get(position).getIllness_name()); holder.tv_intro.setText(doctors.get(position).getDoctor_intro()); //?????头像与url如何对应 Glide.with(context) .load(doctors.get(position).getHead_image()) .placeholder(R.drawable.doctor) .error(R.drawable.doctor) .into(holder.iv_head); final View view = convertView; final int p = position; final int rl_detail = holder.rl_detail.getId(); holder.rl_detail.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { callback.onClick(view, parent, p, rl_detail); } }); final int rl_personal_web = holder.rl_personal_web.getId(); holder.rl_personal_web.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { callback.onClick(view, parent, p, rl_personal_web); } }); return convertView; } public static class ViewHolder { TextView tv_name; TextView tv_hospital; TextView tv_illness; TextView tv_intro; ImageView iv_head; RelativeLayout rl_detail; RelativeLayout rl_personal_web; } }
- list_doctor_item.xml(适配器中每一行的样式布局)
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:background="@drawable/shape1" > <RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content" > <ImageView android:layout_width="50dp" android:layout_height="50dp" android:id="@+id/iv_head" android:background="@color/grey" android:layout_alignParentTop="true" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:layout_marginLeft="20dp" android:layout_marginStart="51dp" android:layout_marginTop="33dp" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="New Text" android:textStyle="bold" android:id="@+id/tv_name" android:layout_alignLeft="@id/tv_hospital" android:layout_alignTop="@+id/iv_head" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="New Text" android:id="@+id/tv_illness" android:layout_above="@+id/tv_intro" android:layout_toRightOf="@+id/tv_hospital" android:layout_toEndOf="@+id/tv_hospital" android:layout_marginLeft="30dp" android:layout_marginStart="30dp" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="New Text" android:id="@+id/tv_hospital" android:layout_below="@+id/tv_name" android:layout_toRightOf="@+id/iv_head" android:layout_toEndOf="@+id/iv_head" android:layout_marginLeft="29dp" android:layout_marginStart="29dp" /> <TextView android:layout_width="wrap_content" android:layout_height="40dp" android:maxLines="2" android:text="New Text" android:id="@+id/tv_intro" android:layout_below="@+id/tv_hospital" android:layout_alignLeft="@+id/tv_hospital" android:layout_alignStart="@+id/tv_hospital" /> <View android:layout_width="match_parent" android:layout_height="1dip" android:background="@color/lightgray" android:layout_gravity="center_horizontal" android:id="@+id/tableLayout" android:layout_below="@+id/iv_head" android:layout_marginTop="25dp" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" /> </RelativeLayout> <RelativeLayout android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="wrap_content" > <RelativeLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_marginTop="5dp" android:id="@+id/rl_detail" android:layout_alignParentStart="true"> <ImageView android:layout_width="26dp" android:layout_height="26dp" android:background="@drawable/consult" android:id="@+id/imageView7" android:layout_alignParentTop="true" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:layout_marginLeft="49dp" android:layout_marginStart="49dp" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="图文详情" android:textColor="@color/primary_2" android:id="@+id/textView28" android:layout_centerVertical="true" android:layout_toRightOf="@+id/imageView7" android:layout_toEndOf="@+id/imageView7" /> </RelativeLayout> <View android:layout_width="1dip" android:layout_height="40dip" android:background="@color/lightgray" android:layout_gravity="center_horizontal" android:id="@+id/tableLayout1" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" /> <RelativeLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/rl_personal_web" android:layout_alignParentTop="true" android:layout_toRightOf="@+id/tableLayout1" android:layout_toEndOf="@+id/tableLayout1" android:layout_marginLeft="38dp" android:layout_marginTop="5dp" android:layout_marginStart="38dp"> <ImageView android:layout_width="30dp" android:layout_height="30dp" android:background="@drawable/personal_web" android:id="@+id/imageView6" android:layout_alignParentTop="true" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="个人主页" android:textColor="@color/primary_2" android:id="@+id/textView8" android:layout_centerVertical="true" android:layout_toRightOf="@+id/imageView6" android:layout_toEndOf="@+id/imageView6" /> </RelativeLayout> </RelativeLayout> </LinearLayout>
二、不带有点击功能适配器
不带有按钮点击功能适配器与带点击功能的适配器不同的就是,用于显示的主函数.java文件不需要继承接口,适配器有所不同,这里就贴一份适配器的代码,思路都是一样的,需要用的时候稍加修改就可以了。
package com.mialab.healthbutler.adapter; import android.content.Context; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.TextView; import com.mialab.healthbutler.R; import com.mialab.healthbutler.domain.Illness; import java.util.List; import butterknife.BindView; import butterknife.ButterKnife; /** * Created by hp on 2016/6/10. */ public class IllnessAdapter extends BaseAdapter { private Context context; private List<Illness> Illnessses; public IllnessAdapter(Context context, List<Illness> Illnessses) { this.context = context; this.Illnessses = Illnessses; } @Override public int getCount() { return Illnessses.size(); } @Override public Illness getItem(int position) { return Illnessses.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder; if (convertView != null) { holder = (ViewHolder) convertView.getTag(); } else { convertView = View.inflate(context, R.layout.list_illness_item, null); holder = new ViewHolder(convertView); convertView.setTag(holder); } holder.tvName.setText(getItem(position).getIllness_name()); return convertView; } static final class ViewHolder { @BindView(R.id.tv_name) TextView tvName; public ViewHolder(View view) { ButterKnife.bind(this, view); } } }
相关文章推荐
- Android悬浮窗按钮实现点击并显示/隐藏多功能列表
- 两个单选按钮,点击其中一个隐藏或显示其他的div
- android 点击一个按钮,选择一张图片,获取路径,然后显示在屏幕
- Android Dialog点击按钮不关闭,控制窗口的显示和关闭
- Android ListView 按钮点击分页显示
- Android 实现点击两个按钮,原地切换界面
- android listview适配器里区分不同按钮的点击事件
- android 适配器里面的按钮点击切换
- android 模仿大众点评团购卷列表多余3条时折叠,点击时显示剩余全部的功能
- 页面进入显示点击按钮再查数据库展现列表
- 两个TextField,输入第一个点击键盘右下角next,光标显示在第二个里面,并且右下角为完成按钮,点击收回键盘
- [Android] 多次按钮点击Toast重复显示解决方案
- android中webview显示网页、进度条显示进度、上一页、下一页、支持放大缩小、返回按钮2秒两次点击退出应用
- Android 点击按钮实现控件显示隐藏
- (转载)[Android]点击按钮进入下一个Activity时显示动画效果
- android 同时点击两个按钮或其他控件均响应的问题
- js/jq点击下拉列表按钮,显示,点击其他地方(包括下拉按钮)隐藏下拉列表
- Android 点击按钮上面显示水波状
- Android点击Button按钮切换按钮文字显示
- 窗口上提供四个文本框和一个按钮,幼儿可以在前三个文本框中输入两个运算数和运算符号,当点击按钮时在第四个文本框中显示结果。