package com.itap.voiceemoticon.adapter;
import org.tadpoleframework.common.StringUtil;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.graphics.Canvas;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AbsListView;
import android.widget.AbsListView.OnScrollListener;
import android.widget.SectionIndexer;
import android.widget.TextView;
import com.itap.voiceemoticon.R;
import com.itap.voiceemoticon.VEApplication;
import com.itap.voiceemoticon.api.Voice;
/**
* <br>==========================
* <br> author:Zenip
* <br> email:lxyczh@gmail.com
* <br> create:2013-1-31
* <br>==========================
*/
public class MyCollectAdapter extends VoiceAdapter implements SectionIndexer, OnScrollListener {
public static interface OnSectionChangeListener {
public void handle(char letter);
}
private OnSectionChangeListener mSectionChangeListener;
public MyCollectAdapter(Activity context) {
super(context);
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
View view = convertView;
ViewHolder viewHolder = null;
if (view == null) {
view = getLayoutInflater().inflate(R.layout.list_item_hot_voice, null);
viewHolder = new ViewHolder();
viewHolder.textViewTitle = (TextView) view.findViewById(R.id.text_view_title);
viewHolder.textViewTags = (TextView) view.findViewById(R.id.text_view_tags);
viewHolder.btnShare = view.findViewById(R.id.btn_share);
viewHolder.btnDelete = view.findViewById(R.id.btn_delete);
viewHolder.btnCollect = view.findViewById(R.id.btn_collect);
viewHolder.textViewLetter = (TextView) view.findViewById(R.id.text_view_section_title);
view.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
final Voice item = (Voice) getItem(position);
viewHolder.textViewTitle.setText(item.title);
viewHolder.textViewTags.setText(item.tags);
if(StringUtil.isBlank(item.tags)) {
viewHolder.textViewTags.setVisibility(View.GONE);
}
viewHolder.btnDelete.setVisibility(View.VISIBLE);
viewHolder.btnCollect.setVisibility(View.GONE);
String section = item.getFirstLetter();
// first item show the section
if (position == 0) {
viewHolder.textViewLetter.setVisibility(View.VISIBLE);
viewHolder.textViewLetter.setText(section);
}
// if it is the new section , show too.
else {
String lastItemSection = mList.get(position - 1).getFirstLetter();
if (section.equals(lastItemSection)) {
viewHolder.textViewLetter.setVisibility(View.GONE);
} else {
viewHolder.textViewLetter.setVisibility(View.VISIBLE);
viewHolder.textViewLetter.setText(section);
}
}
// click events
viewHolder.btnShare.setTag(position);
viewHolder.btnShare.setOnClickListener(this);
viewHolder.btnDelete.setTag(position);
viewHolder.btnDelete.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
callback(v, item, CMD_DELETE, position);
}
});
return view;
}
/**
* Class implementing holder pattern,
* performance boost
*
* @author Zenip
*/
static class ViewHolder {
TextView textViewTitle;
TextView textViewTags;
View btnShare;
View btnDelete;
View btnCollect;
TextView textViewLetter;
}
@Override
public int getPositionForSection(int section) {
Voice voice;
String letter;
for (int i = 0; i < getCount(); i++) {
voice = (Voice) mList.get(i);
letter = voice.getFirstLetter();
char firstChar = letter.toUpperCase().charAt(0);
if (letter.length() > 0 && firstChar == section) {
return i;
}
}
return -1;
}
@Override
public int getSectionForPosition(int position) {
return 0;
}
@Override
public Object[] getSections() {
return null;
}
public void setOnSectionChangeListener(OnSectionChangeListener listener) {
mSectionChangeListener = listener;
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
if (mList == null || firstVisibleItem == -1) {
return;
}
if(firstVisibleItem < 0 || firstVisibleItem >= mList.size()) {
return;
}
Voice item = mList.get(firstVisibleItem);
if(null == item) {
return;
}
String firstLetter = item.getFirstLetter();
if (mSectionChangeListener != null) {
mSectionChangeListener.handle(firstLetter.charAt(0));
}
}
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
}
}