package com.sudosaints.excusepro.listadapters; import java.util.ArrayList; import java.util.List; import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.util.Log; 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.fortysevendeg.android.swipelistview.SwipeListView; import com.sudosaints.excusepro.ExcuseListActivity.ShareCallback; import com.sudosaints.excusepro.ExcuseListActivity.ShareType; import com.sudosaints.excusepro.R; import com.sudosaints.excusepro.model.Excuse; public class ExcuseListAdapter extends BaseAdapter { private List<Excuse> data; private Context context; private List<Integer> resIds; private ShareCallback shareCallback; private List<ViewHolder> holders; public ExcuseListAdapter(Context context, List<Excuse> data, List<Integer> resIds, ShareCallback shareCallback) { this.context = context; this.data = data; this.resIds = resIds; this.shareCallback = shareCallback; holders = new ArrayList<ExcuseListAdapter.ViewHolder>(); } @Override public int getCount() { return data.size(); } @Override public Excuse getItem(int position) { return data.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(final int position, View convertView, ViewGroup parent) { final Excuse item = getItem(position); ViewHolder holder; if (convertView == null) { LayoutInflater li = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); convertView = li.inflate(R.layout.excuse_row_layout_new, parent, false); holder = new ViewHolder(); holder.toonImage = (ImageView) convertView.findViewById(R.id.toonImage); holder.shareButton = (ImageView) convertView.findViewById(R.id.shareButton); holder.excuseText = (TextView) convertView.findViewById(R.id.excuseText); holder.fbShareButton = (ImageView) convertView.findViewById(R.id.fbShareButton); holder.twitterShareButton = (ImageView) convertView.findViewById(R.id.twitterShareButton); holder.backView = convertView.findViewById(R.id.swipelist_backview); holder.frontView = convertView.findViewById(R.id.swipelist_frontview); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } ((SwipeListView)parent).recycle(convertView, position); holder.toonImage.setImageDrawable(context.getResources().getDrawable(resIds.get(position))); holder.excuseText.setText(item.getExcuse()); holder.id = item.getId(); holder.shareButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent sendIntent = new Intent(); sendIntent.setAction(Intent.ACTION_SEND); sendIntent.putExtra(Intent.EXTRA_TEXT, item.getExcuse()); sendIntent.setType("text/plain"); context.startActivity(sendIntent); } }); holder.excuseText.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub new AlertDialog.Builder(context) .setTitle("Excuse Details") .setMessage(item.getExcuse()) .setPositiveButton("OK", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { } }) .show(); } }); holder.fbShareButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub shareCallback.execute(item.getExcuse(), ShareType.SHARE_FACEBOOK); } }); holder.twitterShareButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub shareCallback.execute(item.getExcuse(), ShareType.SHARE_TWITTER); } }); if(!holders.contains(holder)) { holders.add(holder); } return convertView; } public ViewHolder getViewHolder(int position, SwipeListView swipeListView) { Log.d("ListAdapter", "Position - " + position); Log.d("ListAdapter", "HolderSize - " + holders.size()); // Hack for getting correct viewholder according to position if(position > holders.size()) { position = getPosition(position); } if(position == holders.size()) { position = 0; } return holders.get(position); } private int getPosition(int position) { position = position - holders.size(); if(position > holders.size()) { position = getPosition(position); } return position; } public static class ViewHolder { ImageView toonImage; ImageView shareButton; ImageView fbShareButton; ImageView twitterShareButton; TextView excuseText; long id; View frontView, backView; @Override public boolean equals(Object o) { if(! (o instanceof ViewHolder)) { return false; } ViewHolder holder = (ViewHolder) o; if(this.id == holder.id) { return true; } return false; } @Override public int hashCode() { return Integer.valueOf(this.id + ""); } public ImageView getToonImage() { return toonImage; } public void setToonImage(ImageView toonImage) { this.toonImage = toonImage; } public ImageView getShareButton() { return shareButton; } public void setShareButton(ImageView shareButton) { this.shareButton = shareButton; } public ImageView getFbShareButton() { return fbShareButton; } public void setFbShareButton(ImageView fbShareButton) { this.fbShareButton = fbShareButton; } public ImageView getTwitterShareButton() { return twitterShareButton; } public void setTwitterShareButton(ImageView twitterShareButton) { this.twitterShareButton = twitterShareButton; } public TextView getExcuseText() { return excuseText; } public void setExcuseText(TextView excuseText) { this.excuseText = excuseText; } public long getId() { return id; } public void setId(long id) { this.id = id; } public View getFrontView() { return frontView; } public void setFrontView(View frontView) { this.frontView = frontView; } public View getBackView() { return backView; } public void setBackView(View backView) { this.backView = backView; } } }