/** * */ package com.gmail.charleszq.picorner.ui.helper; import java.util.ArrayList; import java.util.Collection; 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.TextView; import com.gmail.charleszq.picorner.R; import com.gmail.charleszq.picorner.task.AbstractFetchIconUrlTask; import com.gmail.charleszq.picorner.ui.command.ICommand; /** * Represents the adapter which has the ability to filter. * * @author charles(charleszq@gmail.com) * */ public abstract class FilterAdapter extends BaseAdapter { List<Object> mData = new ArrayList<Object>(); List<Object> mFilteredData = new ArrayList<Object>(); protected Context mContext; protected ICommand<?> mCommand; /** * */ public FilterAdapter(Context ctx, ICommand<?> command) { this.mContext = ctx; this.mCommand = command; } /* * (non-Javadoc) * * @see android.widget.Adapter#getCount() */ @Override public int getCount() { return mFilteredData.size(); } /* * (non-Javadoc) * * @see android.widget.Adapter#getItem(int) */ @Override public Object getItem(int position) { return mFilteredData.get(position); } /* * (non-Javadoc) * * @see android.widget.Adapter#getItemId(int) */ @Override public long getItemId(int position) { return position; } /* * (non-Javadoc) * * @see android.widget.Adapter#getView(int, android.view.View, * android.view.ViewGroup) */ @Override public View getView(int position, View convertView, ViewGroup parent) { View v = convertView; if (v == null) { v = LayoutInflater.from(mContext).inflate( R.layout.friend_list_item, null); } ViewHolder holder = (ViewHolder) v.getTag(); ImageView avatar; TextView text; if (holder != null) { text = holder.text; avatar = holder.image; } else { avatar = (ImageView) v.findViewById(R.id.img_friend_avatar); text = (TextView) v.findViewById(R.id.txt_friend_name); holder = new ViewHolder(); holder.image = avatar; holder.text = text; v.setTag(holder); } Object data = getItem(position); text.setText(getTitle(data)); AbstractFetchIconUrlTask task = (AbstractFetchIconUrlTask) mCommand .getAdapter(AbstractFetchIconUrlTask.class); if (task != null) // this task is special task.execute(data, avatar); return v; } public void populateData(Collection<?> data) { mData.clear(); mData.addAll(data); mFilteredData.clear(); mFilteredData.addAll(data); notifyDataSetChanged(); } void publishFilterResult(Object results) { List<?> filtered = (List<?>) results; mFilteredData.clear(); for (Object obj : filtered) { mFilteredData.add(obj); } notifyDataSetChanged(); } private class ViewHolder { TextView text; ImageView image; } abstract public String getTitle(Object item); }