Android listview 加载不同的布局实现

来源:互联网 发布:伽利略和北斗频率知乎 编辑:程序博客网 时间:2024/05/18 13:28

由于项目在一个listview 中加载不同的布局item  搞定了该部分后 写出来跟大家分享下


改功能的实现又两种方式 

第一种的方式比较傻瓜式的 跟加载一种布局item 没有太大的区别 我就简单的说下基本的实现方式

该方式主要的特点就是在一个arraylist中 add 进去 不同的 数据modle类 每一个数据modle类 负责将数据显示到不同的布局上去  在实现 getview的方法时 通过 对 数据modle类 .class 进行判断 来加载 inflater 不同的布局 然后将数据显示

此方法跟加载一种布局的adpter 的写法没有太大的去呗 只是多了一个 .class 的判断 从而选择加载某个特点的布局 有几种布局 就需要定义多少的 viewholder;

第二中方法是利用 adapter自带的一些回调函数来实现 该功能谷歌已经在api中实现了

主要用到的方法是 

getItemViewType  该方法通过gettype 来确定当前要显示什么布局 当系统调用 getview时就根据type类型加载布局了

在该方法里必须返回一个“0” 否则会报错 

getViewTypeCount 返回需要加载的布局数

下面附上 adpter部分的代码 :

public class ResponseAdapter extends BaseAdapter {
private ArrayList<ResponseModle> responseList;
private Context context;
private LayoutInflater inflater;
private final int MAX_TYPE = 4;
public ResponseAdapter(Context context,ArrayList<ResponseModle> responseList) {
// TODO Auto-generated constructor stub
this.context = context;
this.responseList = responseList;
inflater = LayoutInflater.from(context);
}
@Override
public int getCount() {
// TODO Auto-generated method stub
if(responseList==null&&responseList.size()==0){
return 0;
}
return responseList.size();
}


@Override
public Object getItem(int arg0) {
// TODO Auto-generated method stub
if(responseList==null&&responseList.size()==0){
return null;
}
return responseList.get(arg0);
}


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


@Override
public int getItemViewType(int position) {
// TODO Auto-generated method stub
// if(position==0)
// return 0;
switch(responseList.get(position).getType()){
case Common.I_PUBLISHED:
return Common.I_PUBLISHED;
case Common.I_COMMENED:
return Common.I_COMMENED;
case Common.I_TAKED:
return Common.I_TAKED;
case Common.I_RELATED:
return Common.I_RELATED;
default:
return 0;
}
}


@Override
public int getViewTypeCount() {
// TODO Auto-generated method stub
return MAX_TYPE;
}


@Override
public View getView(int position, View convertView, ViewGroup group) {
// TODO Auto-generated method stub
IPublishedViewHolder publishViewHolder = null;
ITakedViewHolder takedViewHolder=null;
ICommentViewHolder commentViewHolder=null;
IRelatedViewHolder relatedViewHolder=null;
ResponseModle respModle = responseList.get(position);
int type = respModle.getType();
if(convertView==null){

switch(type){
case Common.I_PUBLISHED:
    convertView = inflater.inflate(R.layout.i_published, null);
    publishViewHolder = new IPublishedViewHolder();
    publishViewHolder.authouname = (TextView)convertView.findViewById(R.id.authorname);
    publishViewHolder.resp_content = (TextView)convertView.findViewById(R.id.resp_content);
    publishViewHolder.resp_promise = (TextView)convertView.findViewById(R.id.resp_promise);
    convertView.setTag(publishViewHolder);
    break;
case Common.I_TAKED:
convertView = inflater.inflate(R.layout.i_taked, null);
takedViewHolder = new ITakedViewHolder();
takedViewHolder. tk_name = (TextView)convertView.findViewById(R.id.tk_name);
takedViewHolder. tk_content = (TextView)convertView.findViewById(R.id.tk_content);
takedViewHolder. tk_promise = (TextView)convertView.findViewById(R.id.tk_promise);
convertView.setTag(takedViewHolder);
break;
case Common.I_COMMENED:
convertView = inflater.inflate(R.layout.i_commened, null);
commentViewHolder = new ICommentViewHolder();
commentViewHolder. com_name = (TextView)convertView.findViewById(R.id.com_name);
commentViewHolder. com_content = (TextView)convertView.findViewById(R.id.com_content);
commentViewHolder. com_promise = (TextView)convertView.findViewById(R.id.com_promise);
convertView.setTag(commentViewHolder);
break;
case Common.I_RELATED:
convertView = inflater.inflate(R.layout.i_related, null);
relatedViewHolder = new IRelatedViewHolder();
relatedViewHolder. related_name = (TextView)convertView.findViewById(R.id.related_name);
relatedViewHolder. relate_content = (TextView)convertView.findViewById(R.id.relate_content);
relatedViewHolder. relate_promise = (TextView)convertView.findViewById(R.id.relate_promise);
convertView.setTag(relatedViewHolder);
break;
}

}else{
switch(type){
case Common.I_PUBLISHED:
publishViewHolder = (IPublishedViewHolder)convertView.getTag();
break;
case Common.I_COMMENED:
commentViewHolder = (ICommentViewHolder)convertView.getTag();
break;
case Common.I_TAKED:
takedViewHolder = (ITakedViewHolder)convertView.getTag();
break;
case Common.I_RELATED:
relatedViewHolder = (IRelatedViewHolder)convertView.getTag();
break;
}

}
switch(type){
case Common.I_PUBLISHED:
publishViewHolder.authouname.setText(respModle.getAuthorModle().getName());
publishViewHolder.resp_content.setText(respModle.getContent());
publishViewHolder.resp_promise.setText(respModle.getPromise());
break;
case Common.I_COMMENED:
commentViewHolder.com_name.setText(respModle.getAuthorModle().getName());
commentViewHolder.com_content.setText(respModle.getContent());
commentViewHolder.com_promise.setTag(respModle.getPromise());
break;
case Common.I_TAKED:
takedViewHolder.tk_name.setText(respModle.getAuthorModle().getName());
takedViewHolder.tk_content.setText(respModle.getContent());
takedViewHolder.tk_promise.setText(respModle.getPromise());
break;
case Common.I_RELATED:
relatedViewHolder.related_name.setText(respModle.getAuthorModle().getName());
relatedViewHolder.relate_content.setText(respModle.getContent());
relatedViewHolder.relate_promise.setText(respModle.getPromise());
break;
}
return convertView;
}
class IPublishedViewHolder{
TextView authouname;
TextView resp_content ;
TextView resp_promise ;
}
class ITakedViewHolder{
TextView tk_name;
TextView tk_content;
TextView tk_promise;
}
class ICommentViewHolder{
TextView com_name;
TextView com_content;
TextView com_promise;

}
class IRelatedViewHolder{
TextView related_name;
TextView relate_content;
TextView relate_promise;
}


0 0
原创粉丝点击