您的位置:首页 > 移动开发 > Android开发

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);
}
}
}

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐