package com.likebamboo.osa.android.ui.adapter; import android.content.Context; import android.text.Html; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import com.likebamboo.osa.android.R; import com.likebamboo.osa.android.entity.BlogList; import com.likebamboo.osa.android.entity.BlogList.Blog; import com.likebamboo.osa.android.interfaces.IOnItemClickListener; import com.likebamboo.osa.android.ui.view.fa.TextAwesome; import com.likebamboo.osa.android.utils.DateUtil; import java.util.ArrayList; import butterknife.ButterKnife; import butterknife.InjectView; /** * Created by wentaoli on 2015/5/12. */ public class BlogAdapter extends ChoiceAdapter<Blog> { private IOnItemClickListener mItemClickListener = null; /** * 设置回调 * * @param l */ public void setOnItemClickListener(IOnItemClickListener l) { this.mItemClickListener = l; } public BlogAdapter(Context ctx) { super(ctx); } public BlogAdapter(Context ctx, ArrayList<BlogList.Blog> datas) { super(ctx, datas); } @Override public void removeData(Blog data) { if (data == null) { return; } // 找到相同的数据 Blog temp = null; for (BlogList.Blog b : mDatas) { if (("" + b.getUrl()).equals(data.getUrl())) { temp = b; break; } } super.removeData(temp); } @Override public View getView(int position, View view, ViewGroup parent) { ViewHolder holder; if (view != null) { holder = (ViewHolder) view.getTag(); } else { view = LayoutInflater.from(mContext).inflate(R.layout.item_blog, parent, false); holder = new ViewHolder(view); view.setTag(holder); } Blog item = getItem(position); if (item == null) { return view; } view.setId(position); view.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { int pos = view.getId(); if (mItemClickListener != null) { mItemClickListener.onItemClick(pos, getItem(pos)); } } }); view.setOnLongClickListener(new View.OnLongClickListener() { @Override public boolean onLongClick(View view) { int pos = view.getId(); if (mItemClickListener != null) { mItemClickListener.onItemLongClick(pos, getItem(pos)); } return true; } }); // 是否选中某一项 if (isItemSelected(position)) { holder.cover.setSelected(true); } else { holder.cover.setSelected(false); } /** * PS:为什么在Adapter中设置View的OnClick事件,而不是直接使用 * @see android.widget.AdapterView#setOnItemClickListener(AdapterView.OnItemClickListener) * 的方式来实现? * 因为用 setOnItemClickListener 的方式 设置 ListView 的item 的background没有效果,不知道什么鬼, * 各位大神如果有解决方案,望告知~ */ holder.titleTv.setText(item.getTitle()); holder.abstractsTv.setText(Html.fromHtml(item.getAbstracts().replace("\n", "<br/>"))); holder.tagTv.setText(R.string.fa_filter, item.getCategorys()); holder.timeTv.setText(R.string.fa_calendar, DateUtil.parseDate(item.getAddTime())); return view; } public static class ViewHolder { @InjectView(R.id.blog_title_tv) public TextView titleTv; @InjectView(R.id.blog_author_tv) public TextView authorTv; @InjectView(R.id.blog_abstracts_tv) public TextView abstractsTv; @InjectView(R.id.blog_time_tv) public TextAwesome timeTv; @InjectView(R.id.blog_tag_tv) public TextAwesome tagTv; @InjectView(R.id.item_cover) public View cover; public ViewHolder(View view) { ButterKnife.inject(this, view); } } }