1.ListView的Adapter实现如下:
class CollectionAdapter extends BaseAdapter {
private static final int VIEW_TYPE = 3;
private static final int TYPE_0 = 0; // 手机科技资讯
private static final int TYPE_1 = 1; // 图片资讯
private static final int TYPE_2 = 2; // 新闻博客
@Override
public int getCount() {
return mList.size();
}
@Override
public Object getItem(int position) {
return mList.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
/**
* 每个convertView都会调用此方法,获得当前所需要的view样式
*/
@Override
public int getItemViewType(int position) {
Object obj = mList.get(position);
if (obj instanceof ArticleItem) {
return TYPE_0;
} else if (obj instanceof PhonePhotoItem) {
return TYPE_1;
} else {
return TYPE_2;
}
}
@Override
public int getViewTypeCount() {
return VIEW_TYPE;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
TechHolder techHolder = null;
PhotoHolder photoHolder = null;
BlogHolder blogHolder = null;
ArticleItem techItem = null;
PhonePhotoItem photoItem = null;
BlogItem blogItem = null;
Object obj = mList.get(position);
if (obj instanceof ArticleItem) {
techItem = (ArticleItem) obj;
} else if (obj instanceof PhonePhotoItem) {
photoItem = (PhonePhotoItem) obj;
} else {
blogItem = (BlogItem) obj;
}
int viewType = getItemViewType(position);
if (convertView == null) {
// 首页科技资讯
switch (viewType) { // 按当前所需的样式,确定new的布局
case TYPE_0:
techHolder = new TechHolder();
convertView = View.inflate(mContext,
R.layout.item_index_intro_lv, null);
techHolder.img = (ImageView) convertView
.findViewById(R.id.img);
techHolder.title = (TextView) convertView
.findViewById(R.id.title);
techHolder.body = (TextView) convertView
.findViewById(R.id.body);
techHolder.date = (TextView) convertView
.findViewById(R.id.time);
convertView.setTag(techHolder);
break;
// 美图
case TYPE_1:
photoHolder = new PhotoHolder();
convertView = View.inflate(mContext,
R.layout.item_phone_photo_lv, null);
photoHolder.img = (ImageView) convertView
.findViewById(R.id.img);
photoHolder.text = (TextView) convertView
.findViewById(R.id.text);
convertView.setTag(photoHolder);
break;
// 新闻博客
case TYPE_2:
blogHolder = new BlogHolder();
convertView = View.inflate(mContext,
R.layout.item_fresh_bolg_lv, null);
blogHolder.title = (TextView) convertView
.findViewById(R.id.title);
blogHolder.uPic = (CircleImageView) convertView
.findViewById(R.id.image);
blogHolder.name = (TextView) convertView
.findViewById(R.id.name);
blogHolder.published = (TextView) convertView
.findViewById(R.id.publish);
blogHolder.summary = (TextView) convertView
.findViewById(R.id.summary);
blogHolder.viewsTv = (TextView) convertView
.findViewById(R.id.views_tx);
blogHolder.diggsTv = (TextView) convertView
.findViewById(R.id.diggs_tx);
blogHolder.commentsTv = (TextView) convertView
.findViewById(R.id.comment_tx);
blogHolder.diggs = (LinearLayout) convertView
.findViewById(R.id.hots_diggs);
blogHolder.views = (LinearLayout) convertView
.findViewById(R.id.hots_views);
blogHolder.comment = (LinearLayout) convertView
.findViewById(R.id.hots_comment);
convertView.setTag(blogHolder);
break;
}
} else {
switch (viewType) {
case TYPE_0:
techHolder = (TechHolder) convertView.getTag();
break;
case TYPE_1:
photoHolder = (PhotoHolder) convertView.getTag();
break;
case TYPE_2:
blogHolder = (BlogHolder) convertView.getTag();
break;
}
}
switch (viewType) {
case TYPE_0:
if (techItem != null) {
if (!TextUtils.isEmpty(techItem.getPicUrl())) {
Picasso.with(mContext).load(techItem.getPicUrl())
.placeholder(R.color.ECECEC)
.error(R.color.ECECEC).into(techHolder.img);
}
if (!TextUtils.isEmpty(techItem.getTitle())) {
techHolder.title.setText(techItem.getTitle());
} else {
techHolder.title.setText("");
}
if (!TextUtils.isEmpty(techItem.getTitle())) {
techHolder.body.setText(techItem.getContent());
} else {
techHolder.body.setText("");
}
if (!TextUtils.isEmpty(techItem.getTitle())) {
techHolder.date.setText(techItem.getDate());
} else {
techHolder.date.setText("");
}
}
break;
case TYPE_1:
if (photoItem != null) {
if (!TextUtils.isEmpty(photoItem.getPic())) {
Picasso.with(mContext).load(photoItem.getPic())
.placeholder(R.color.ECECEC)
.error(R.color.ECECEC).into(photoHolder.img);
}
if (!TextUtils.isEmpty(photoItem.getTitle())) {
photoHolder.text.setText(photoItem.getTitle());
} else {
photoHolder.text.setText("");
}
}
break;
case TYPE_2:
if (blogItem != null) {
blogHolder.title.setText(blogItem.getTitle());
blogHolder.name.setText(blogItem.getName());
blogHolder.summary.setText(blogItem.getSummary());
if (!TextUtils.isEmpty(blogItem.getAvatar())) {
Picasso.with(mContext).load(blogItem.getAvatar())
.placeholder(R.drawable.touxiang)
.error(R.drawable.touxiang)
.into(blogHolder.uPic);
}
if (!TextUtils.isEmpty(blogItem.getPublished())) {
blogHolder.published.setText(DateUtils
.convertGMTToLoacale(blogItem.getPublished()));
}
if (!TextUtils.isEmpty(blogItem.getViews())) {
blogHolder.viewsTv.setText(blogItem.getViews());
} else {
blogHolder.viewsTv.setText("");
}
if (!TextUtils.isEmpty(blogItem.getComments())) {
blogHolder.commentsTv.setText(blogItem.getComments());
} else {
blogHolder.commentsTv.setText("");
}
if (!TextUtils.isEmpty(blogItem.getDiggs())) {
blogHolder.diggsTv.setText(blogItem.getDiggs());
} else {
blogHolder.diggsTv.setText("");
}
}
break;
default:
break;
}
return convertView;
}
}
static class TechHolder {
ImageView img;
TextView title;
TextView body;
TextView date;
}
static class PhotoHolder {
ImageView img;
TextView text;
}
static class BlogHolder {
TextView title;
CircleImageView uPic;
TextView summary;
TextView published;
TextView viewsTv;
TextView diggsTv;
TextView name;
TextView commentsTv;
TextView textViews;
LinearLayout views;
LinearLayout diggs;
LinearLayout comment;
}
2.RecycleView的Adapter
public class CityAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private final int TITLE_TYPE = 1;
private final int CONTENT_TYPE = 2;
private List<CityChildBean> mList = new ArrayList<>();
private OnItemOnClickListener mOnItemOnClickListener;
public CityAdapter(List<CityChildBean> list) {
this.mList = list;
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View tv_ItemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_city_title, parent, false);
View iv_ItemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_city_content, parent, false);
RecyclerView.ViewHolder holder = null;
switch (viewType) {
case TITLE_TYPE:
holder = new TitleView(tv_ItemView);
break;
case CONTENT_TYPE:
holder = new ContentView(iv_ItemView);
break;
}
return holder;
}
@Override
public void onBindViewHolder(final RecyclerView.ViewHolder holder, final int position) {
if (getItemViewType(position) == TITLE_TYPE) {
((TitleView) holder).mTitle.setText(mList.get(position).getCity());
} else if (getItemViewType(position) == CONTENT_TYPE) {
((ContentView) holder).mCity.setText(mList.get(position).getCity());
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(mOnItemOnClickListener!=null){
mOnItemOnClickListener.onClick(position,holder.itemView);
}
}
});
}
}
@Override
public int getItemCount() {
return mList.size();
}
@Override
public int getItemViewType(int position) {
if (mList.get(position).getCity().length() > 1)
return CONTENT_TYPE;
else
return TITLE_TYPE;
}
public class TitleView extends RecyclerView.ViewHolder {
@BindView(R.id.tv_title)
TextView mTitle;
public TitleView(View itemView) {
super(itemView);
ButterKnife.bind(this, itemView);
}
}
public class ContentView extends RecyclerView.ViewHolder {
@BindView(R.id.tv_city)
TextView mCity;
public ContentView(View itemView) {
super(itemView);
ButterKnife.bind(this, itemView);
}
}
public void setmOnItemOnClickListener(OnItemOnClickListener onItemOnClickListener) {
if (onItemOnClickListener != null) {
mOnItemOnClickListener = onItemOnClickListener;
}
}
public interface OnItemOnClickListener {
void onClick(int position, View view);
}
}
网友评论