一个适配器公用,多个布局文件同用一个适配器

来源:互联网 发布:如何ping mac地址 编辑:程序博客网 时间:2024/06/05 18:32



先定义布局的数量,布局的类型,布局的标记

private int level = 0;//选择哪种类型的布局文件的标记private final int TYPE_1 = 0; //布局类型一private final int TYPE_2 = 1; //布局类型二private final int TYPE_3 = 2; //布局类型三private final int VIEW_TYPE = 3; //总布局数

然后,重写baseAdapter的方法

@Overridepublic int getViewTypeCount() {return VIEW_TYPE;}@Overridepublic int getItemViewType(int position) {if(0 == position)           return TYPE_1;else if(1 == position)return TYPE_2;else if(2 == position)return TYPE_3;else return TYPE_1;}

最后,在getView()方法中根据level来选择你当前的布局类型


public View getView(int position, View view, ViewGroup arg2) {ViewHolder viewHolder = null;DataItem mContent = list.get(position);int type = getItemViewType(level);if (view == null) {viewHolder = new ViewHolder();switch (type) {case TYPE_1:view = LayoutInflater.from(mContext).inflate(R.layout.personal_contact_list_item, null);initView(view,viewHolder,0);break;case TYPE_2:view = LayoutInflater.from(mContext).inflate(R.layout.teacher_contact_list_item, null);initView(view,viewHolder,1);break;case TYPE_3:view = LayoutInflater.from(mContext).inflate(R.layout.public_contact_list_item, null);initView(view,viewHolder,2);break;default:break;}view.setTag(viewHolder);} else {viewHolder = (ViewHolder) view.getTag();}//根据position获取分类的首字母的Char ascii值int section = getSectionForPosition(position);//如果当前位置等于该分类首字母的Char的位置 ,则认为是第一次出现if(position == getPositionForSection(section)){viewHolder.tvLetter.setVisibility(View.VISIBLE);viewHolder.tvLetter.setText(mContent.getSortLetters());}else{viewHolder.tvLetter.setVisibility(View.GONE);}switch (type) {case TYPE_1:initData(viewHolder,mContent,0,position);break;case TYPE_2:initData(viewHolder,mContent,1,position);break; case TYPE_3:initData(viewHolder,mContent,2,position);break;};return view;}


0 0
原创粉丝点击