package com.kuxhausen.huemore; import android.app.Activity; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.ImageButton; import android.widget.TextView; import com.kuxhausen.huemore.net.MoodPlayer; import com.kuxhausen.huemore.net.PlayingMood; public class NotificationRowAdapter extends ArrayAdapter<PlayingMood> implements OnActiveMoodsChangedListener, OnClickListener { private Context context; private MoodPlayer mPlayer; public NotificationRowAdapter(Context con, MoodPlayer mp) { super(con, android.R.layout.simple_list_item_1, mp.getPlayingMoods()); context = con; mPlayer = mp; mp.addOnActiveMoodsChangedListener(this); } @Override public View getView(int position, View convertView, ViewGroup parent) { View rowView = convertView; ViewHolder holder; if (rowView == null) { // Get a new instance of the row layout view LayoutInflater inflater = ((Activity) context).getLayoutInflater(); rowView = inflater.inflate(R.layout.notification_row, null); // Hold the view objects in an object, that way the don't need to be "re-finded" holder = new ViewHolder(); holder.mainText = (TextView) rowView.findViewById(R.id.notificationText); holder.cancelButton = (ImageButton) rowView.findViewById(R.id.moodStopButton); rowView.setTag(holder); } else { holder = (ViewHolder) rowView.getTag(); } /** Set data to your Views. */ PlayingMood pm = mPlayer.getPlayingMoods().get(position); holder.mainText.setTag(pm); holder.mainText.setText(pm.toString()); holder.cancelButton.setOnClickListener(this); holder.cancelButton.setTag(pm); return rowView; } protected static class ViewHolder { protected TextView mainText; protected ImageButton cancelButton; } @Override public void onActiveMoodsChanged() { this.notifyDataSetChanged(); } public void onDestroy() { mPlayer.removeOnActiveMoodsChangedListener(this); } @Override public int getCount() { return mPlayer.getPlayingMoods().size(); } @Override public boolean isEmpty() { return mPlayer.getPlayingMoods().isEmpty(); } @Override public PlayingMood getItem(int position) { return mPlayer.getPlayingMoods().get(position); } @Override public void onClick(View v) { PlayingMood pm = (PlayingMood) v.getTag(); mPlayer.cancelMood(pm.getGroup()); } }