package com.wyp.materialqqlite.ui; import java.util.List; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; import com.wyp.materialqqlite.R; public class NewsListAdapter extends BaseAdapter { private Context m_Context = null; private List<NewsListItem> m_arrData; public NewsListAdapter(Context context, List<NewsListItem> data) { m_Context = context; m_arrData = data; } @Override public int getCount() { if (m_arrData != null) return m_arrData.size(); else return 0; } @Override public Object getItem(int position) { if (m_arrData != null && position >= 0 && position < m_arrData.size()) return m_arrData.get(position); else return null; } @Override public long getItemId(int position) { return position; } @Override public int getViewTypeCount() { return NewsListItem.TYPE_COUNT; } @Override public int getItemViewType(int position) { if (m_arrData != null) { NewsListItem data = m_arrData.get(position); if (data != null) return data.m_nType; } return 0; } @Override public View getView(final int position, View convertView, ViewGroup parent) { NewsListItem data = m_arrData.get(position); if (null == data) return convertView; ViewHolder holder = null; switch (data.m_nType) { case NewsListItem.TYPE_CONTENT: if (null == convertView) { convertView = LayoutInflater.from(m_Context).inflate( R.layout.news_list_item, parent, false); holder = new ViewHolder(); holder.m_layoutBg = (LinearLayout) convertView.findViewById(R.id.news_item_bg); holder.m_imgIcon = (ImageView) convertView.findViewById(R.id.news_item_imgIcon); holder.m_txtTitle = (TextView) convertView.findViewById(R.id.news_item_txtTitle); holder.m_txtDesc = (TextView) convertView.findViewById(R.id.news_item_txtDesc); convertView.setTag(holder); } else { holder = (ViewHolder)convertView.getTag(); } break; case NewsListItem.TYPE_MARGIN_L: if (null == convertView) { convertView = LayoutInflater.from(m_Context).inflate( R.layout.list_item_margin_l, parent, false); } break; case NewsListItem.TYPE_MARGIN_S: default: if (null == convertView) { convertView = LayoutInflater.from(m_Context).inflate( R.layout.list_item_margin_s, parent, false); } break; } if (null == holder) return convertView; if (isSingleSubItem(position)) { holder.m_layoutBg.setBackgroundResource(R.drawable.listitem_bg_style); } else if (isFirstSubItem(position)) { holder.m_layoutBg.setBackgroundResource(R.drawable.listitem_bg_top_style); } else if (isLastSubItem(position)) { holder.m_layoutBg.setBackgroundResource(R.drawable.listitem_bg_bottom_style); } else { holder.m_layoutBg.setBackgroundResource(R.drawable.listitem_bg_mid_style); } if (NewsListItem.TYPE_CONTENT == data.m_nType) { if (data.m_nIconResId != 0) holder.m_imgIcon.setBackgroundResource(data.m_nIconResId); else holder.m_imgIcon.setVisibility(View.GONE); holder.m_txtTitle.setText(data.m_strTitle); } return convertView; } private boolean isFirstSubItem(int nPos) { if (nPos < 0 || nPos >= m_arrData.size()) return false; NewsListItem data = m_arrData.get(nPos); if (data.m_nType != NewsListItem.TYPE_CONTENT) return false; if (nPos == 0) return true; data = m_arrData.get(nPos-1); return (data.m_nType != NewsListItem.TYPE_CONTENT); } private boolean isLastSubItem(int nPos) { if (nPos < 0 || nPos >= m_arrData.size()) return false; NewsListItem data = m_arrData.get(nPos); if (data.m_nType != NewsListItem.TYPE_CONTENT) return false; if (nPos == m_arrData.size()-1) return true; data = m_arrData.get(nPos+1); return (data.m_nType != NewsListItem.TYPE_CONTENT); } private boolean isSingleSubItem(int nPos) { return isFirstSubItem(nPos) && isLastSubItem(nPos); } private class ViewHolder { LinearLayout m_layoutBg; ImageView m_imgIcon; TextView m_txtTitle; TextView m_txtDesc; } }