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

Android listview 加载不同的布局实现

2014-07-01 14:38 441 查看
由于项目在一个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;

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