package com.cellasoft.univrapp.adapter; import android.content.Context; import android.graphics.Typeface; import android.text.Html; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import com.cellasoft.univrapp.R; import com.cellasoft.univrapp.model.Item; import com.cellasoft.univrapp.utils.ActiveList; import com.cellasoft.univrapp.utils.DateUtils; import java.util.List; public class ItemAdapter extends BaseListAdapter<Item> { private final int[] bgColors = new int[]{R.color.aliceBlue, android.R.color.white}; private int lastRequestPosition = -1; private OnItemRequestListener itemRequestListener; public ItemAdapter(Context context, int resources) { super(context, resources); items = new ActiveList<Item>(); } public ItemAdapter(Context context, int resource, ActiveList<Item> items) { super(context, resource, items); } @Override public synchronized void setItems(List<Item> items) { lastRequestPosition = -1; if (this.items != null) { ((ActiveList<Item>) this.items).removeListener(activeListListener); } this.items = items; ((ActiveList<Item>) this.items).addListener(activeListListener); this.notifyDataSetInvalidated(); } @Override public synchronized void addItems(List<Item> items) { if (this.items == null) { this.items = new ActiveList<Item>(); ((ActiveList<Item>) this.items).addListener(activeListListener); } this.items.addAll(items); } protected void setItemViewIfRead(View parentView, ViewHolder viewHolder, Item item) { if (viewHolder instanceof Holder) { if (!item.isRead()) { parentView.setBackgroundResource(bgColors[0]); ((Holder) viewHolder).title.setTypeface(Typeface.DEFAULT_BOLD, 0); } else { parentView.setBackgroundResource(bgColors[1]); ((Holder) viewHolder).title.setTypeface(Typeface.DEFAULT); } } } @Override protected void populateDataForRow(ViewHolder viewHolder, Item item, int position) { if (viewHolder instanceof Holder) { Holder holder = (Holder) viewHolder; holder.title.setText(item.title); String description = item.description.replace("Pubblicato da:","<b>Pubblicato da:</b>"); holder.description.setText(Html.fromHtml(description)); holder.date.setText(DateUtils.formatDate(item.pubDate)); } } @Override public View getView(int position, View convertView, ViewGroup parent) { Holder holder; Item item = items.get(position); if (convertView == null) { convertView = mInflater.inflate(resource, parent, false); holder = new Holder(); holder.title = (TextView) convertView.findViewById(R.id.item_title); holder.description = (TextView) convertView.findViewById(R.id.item_description); holder.date = (TextView) convertView.findViewById(R.id.item_date); convertView.setTag(holder); } else { holder = (Holder) convertView.getTag(); } setItemViewIfRead(convertView, holder, item); populateDataForRow(holder, item, position); // request more items if we reach the to 2/3 items int requestPosition = (2 * getCount() / 3); if (((position == requestPosition) || (position == getCount() - 1)) && lastRequestPosition != requestPosition && itemRequestListener != null) { lastRequestPosition = requestPosition; itemRequestListener.onRequest(getItem(getCount() - 1)); } return convertView; } public void setItemRequestListener(OnItemRequestListener listener) { this.itemRequestListener = listener; } public interface OnItemRequestListener { void onRequest(Item lastItem); } class Holder extends ViewHolder { TextView title; TextView description; TextView date; } }