package com.ese2013.mensaunibe.notification; import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; import android.annotation.SuppressLint; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.TextView; import com.ese2013.mensaunibe.R; import com.ese2013.mensaunibe.menu.MenuListAdapter.TitleListener; import com.ese2013.mensaunibe.model.Model; /** * @author group7 * @author Marc Dojtschinov * @author Andreas Hohler */ public class NotificationResultAdapter extends BaseAdapter { TitleListener mCallback; private Context context; private int resource; private LayoutInflater inflater; private ArrayList<NotificationHolder> keywordResultList; private ArrayList<Integer> mensaIds; private HashMap<Integer, ArrayList<String>> map; public NotificationResultAdapter(Context context, int resource, ArrayList<NotificationHolder> result ) { assert result != null; this.context = context; this.resource = resource; keywordResultList = result; sortList(); } @SuppressLint("UseSparseArrays") private void sortList() { map = new HashMap<Integer, ArrayList<String>>(); HashSet<Integer> tempIds = new HashSet<Integer>(); for(NotificationHolder nf : keywordResultList) { int i = nf.getMensaId(); tempIds.add(i); if(!map.containsKey(i)) map.put(i, new ArrayList<String>()); map.get(i).add( nf.getKeyword() ); } mensaIds = new ArrayList<Integer>(tempIds); } @Override public View getView(int position, View convertView, ViewGroup parent) { View view = convertView; if(view == null) { inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); view = inflater.inflate(this.resource, parent, false); ViewHolder viewHolder = new ViewHolder(); viewHolder.mensa = (TextView) view.findViewById(R.id.notification_mensa); viewHolder.keyword = (TextView) view.findViewById(R.id.notification_keywords); view.setTag(viewHolder); } ViewHolder holder = (ViewHolder) view.getTag(); clearHolder(holder); int mensaId = mensaIds.get(position); ArrayList<String> keywords = map.get(mensaId); holder.mensa.setLongClickable(false); holder.mensa.setText(Model.getInstance().getMensaById(mensaId).getName()); holder.mensa.setVisibility(View.VISIBLE); String text = ""; int fid = 0; for(String k : keywords) { text+=k; fid++; if(keywords.size()>1 && fid<keywords.size()) text+=", "; } holder.keyword.setText(text); holder.keyword.setVisibility(View.VISIBLE); return view; } /** * clears all views in a ViewHolder and hide them. * @param ViewHolder */ private void clearHolder(ViewHolder holder) { holder.mensa.setText(""); holder.mensa.setVisibility(View.GONE); holder.keyword.setText(""); holder.keyword.setVisibility(View.GONE); } @Override public long getItemId(int position) { return position; } @Override public int getCount() { return mensaIds.size(); } @Override public Integer getItem(int position) { return mensaIds.get(position); } /** * @author group7 * @author Sandor Torok * Just holds the TextView variables (pattern) */ static class ViewHolder { public TextView mensa; public TextView keyword; } }