package com.talk.demo; import android.app.AlertDialog; import android.app.Dialog; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.graphics.Bitmap; import android.net.Uri; import android.os.Bundle; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.View.OnLongClickListener; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.TextView; import android.widget.Toast; import com.nostra13.universalimageloader.core.DisplayImageOptions; import com.nostra13.universalimageloader.core.ImageLoader; import com.nostra13.universalimageloader.core.ImageLoaderConfiguration; import com.nostra13.universalimageloader.core.display.FadeInBitmapDisplayer; import com.nostra13.universalimageloader.core.display.RoundedBitmapDisplayer; import com.nostra13.universalimageloader.core.listener.ImageLoadingListener; import com.nostra13.universalimageloader.core.listener.SimpleImageLoadingListener; import com.talk.demo.time.DateInfo; import com.talk.demo.time.TimeCache; import com.talk.demo.time.TimeAllItem; import com.talk.demo.time.TimeViewItem; import com.talk.demo.time.ViewAsItem; import com.talk.demo.time.ViewItemActivity; import java.util.ArrayList; import java.util.HashMap; public class TimeListAdapter extends BaseAdapter { private static String TAG = "TimeListAdapter"; private final Context context; private ArrayList<TimeViewItem> values; private ViewHolder holder; private ViewTagHolder mTagHolder; private ViewHeaderHolder mHeaderHolder; private HashMap<String, ArrayList<TimeCache>> record_cache; protected ImageLoader imageLoader = ImageLoader.getInstance(); protected DisplayImageOptions options; private ImageLoadingListener animateFirstListener = new AnimateFirstDisplayListener(); private static final int TYPE_CATEGORY_ITEM = 0; private static final int TYPE_ITEM = 1; private static final int TYPE_TAG_ITEM = 2; public TimeListAdapter(Context context, ArrayList<TimeViewItem> data, HashMap<String, ArrayList<TimeCache>> recordCache) { this.context = context; this.values = data; this.record_cache = recordCache; options = new DisplayImageOptions.Builder() .cacheInMemory(true) .cacheOnDisk(true) .considerExifParams(true) .displayer(new RoundedBitmapDisplayer(20)) .build(); ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(context) .defaultDisplayImageOptions(options) .build(); imageLoader.init(config); } @Override public View getView(int position, View convertView, ViewGroup parent) { int itemViewType = getItemViewType(position); switch(itemViewType) { case TYPE_ITEM: holder = new ViewHolder(); convertView = LayoutInflater.from(context).inflate(R.layout.record_listitem, null); holder.image = (ImageView) convertView.findViewById(R.id.time_pic); holder.content = (TextView) convertView.findViewById(R.id.content); holder.create_time = (TextView) convertView.findViewById(R.id.create_time); holder.create_date = (TextView) convertView.findViewById(R.id.create_date); holder.create_week = (TextView) convertView.findViewById(R.id.create_week); // 将holder绑定到convertView convertView.setTag(holder); // 向ViewHolder中填入的数据 ViewAsItem view_item = values.get(position).getViewItem(); holder.content.setText(view_item.getContent()); String time_info = view_item.getCreateTime(); DateInfo mDateInfo = new DateInfo(time_info); mDateInfo.parseCreateTime(); final int item_id = view_item.getItemId(); final String createDate = mDateInfo.getDate(); final String createTime = mDateInfo.getTime(); holder.create_time.setText(mDateInfo.getTime()); holder.create_date.setText(mDateInfo.getDate()); holder.create_week.setText(mDateInfo.getWeekInfo()); int media_type = view_item.getContentType(); final String itemContent = view_item.getContent(); final String title = view_item.getTitle(); String preContent = null; if(title != null) { preContent = title.concat("\n\n"+itemContent); } else { preContent = itemContent; } final String lastContent = preContent; if(2 == media_type || 4 == media_type) { Uri uri = null; if(null != view_item.getPhoto()) { uri = Uri.parse("file://"+"/sdcard/Demo/"+view_item.getPhoto()); } else { uri = Uri.parse("file://"+"/sdcard/Demo/"+"20140810231230"); } Log.d(TAG, " image uri: "+uri.toString()); holder.image.setVisibility(View.VISIBLE); imageLoader.displayImage(uri.toString(), holder.image, animateFirstListener); } convertView.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { //TODO Intent mIntent = new Intent(context, ViewItemActivity.class); Bundle mBundle = new Bundle(); Log.d(TAG, "create date : "+createDate); mBundle.putInt("item_id", item_id); mBundle.putString("createdate", createDate); mBundle.putString("createtime", createTime); mBundle.putString("content", lastContent); mIntent.putExtras(mBundle); context.startActivity(mIntent); } }); convertView.setOnLongClickListener(new OnLongClickListener() { @Override public boolean onLongClick(View v) { ShowItemDialog().show(); return false; } }); break; case TYPE_TAG_ITEM: mTagHolder = new ViewTagHolder(); convertView = LayoutInflater.from(context).inflate(R.layout.record_listitem, null); mTagHolder.image = (ImageView) convertView.findViewById(R.id.time_pic); mTagHolder.tag = (TextView) convertView.findViewById(R.id.tag); mTagHolder.tag.setVisibility(View.VISIBLE); mTagHolder.content = (TextView) convertView.findViewById(R.id.content); mTagHolder.create_time = (TextView) convertView.findViewById(R.id.create_time); mTagHolder.create_date = (TextView) convertView.findViewById(R.id.create_date); mTagHolder.create_week = (TextView) convertView.findViewById(R.id.create_week); convertView.setTag(mTagHolder); TimeViewItem time_view_item = values.get(position); mTagHolder.tag.setText(time_view_item.getTagTitle()); final String tag_title = time_view_item.getTagTitle(); // 向ViewHolder中填入的数据 // get first item from tag items ViewAsItem view_as_item = time_view_item.getListViewItem().get(0); mTagHolder.content.setText(view_as_item.getContent()); String timeInfo = view_as_item.getCreateTime(); DateInfo mDateInfo2 = new DateInfo(timeInfo); mDateInfo2.parseCreateTime(); final String createDate2 = mDateInfo2.getDate(); final String createTime2 = mDateInfo2.getTime(); mTagHolder.create_time.setText(mDateInfo2.getTime()); mTagHolder.create_date.setText(mDateInfo2.getDate()); mTagHolder.create_week.setText(mDateInfo2.getWeekInfo()); int media_type2 = view_as_item.getContentType(); if(2 == media_type2 || 4 == media_type2) { Uri uri = null; if(null != view_as_item.getPhoto()) { uri = Uri.parse("file://"+"/sdcard/Demo/"+view_as_item.getPhoto()); } else { uri = Uri.parse("file://"+"/sdcard/Demo/"+"20140810231230"); } Log.d(TAG, " image uri: "+uri.toString()); mTagHolder.image.setVisibility(View.VISIBLE); imageLoader.displayImage(uri.toString(), holder.image, animateFirstListener); } convertView.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { //TODO: fix bug Intent mIntent = new Intent(context, TimeAllItem.class); Bundle mBundle = new Bundle(); Log.d(TAG, "tag title : "+ tag_title); mBundle.putString("tag_title", tag_title); mBundle.putString("createdate", createDate2); mBundle.putString("createtime", createTime2); mBundle.putParcelableArrayList("recordcache", record_cache.get(tag_title)); Log.d(TAG,"items size: "+ record_cache.get(tag_title).size()); mIntent.putExtras(mBundle); context.startActivity(mIntent); } }); convertView.setOnLongClickListener(new OnLongClickListener() { @Override public boolean onLongClick(View v) { ShowTagDialog(tag_title).show(); return false; } }); break; case TYPE_CATEGORY_ITEM: mHeaderHolder = new ViewHeaderHolder(); convertView = LayoutInflater.from(context).inflate(R.layout.time_list_header, null); mHeaderHolder.list_section = (TextView) convertView.findViewById(R.id.time_list_header); convertView.setTag(mHeaderHolder); mHeaderHolder.list_section.setText(values.get(position).getHeadContent()); break; } return convertView; } private static class AnimateFirstDisplayListener extends SimpleImageLoadingListener { @Override public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) { if (loadedImage != null) { ImageView imageView = (ImageView) view; FadeInBitmapDisplayer.animate(imageView, 500); imageView.setImageBitmap(loadedImage); } } } private Dialog ShowItemDialog() { AlertDialog.Builder builder = new AlertDialog.Builder(context); builder.setItems(R.array.item_opt, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { switch(which) { case 0: Toast.makeText(context, "移除", 2000).show(); break; case 1: Toast.makeText(context, "分享", 2000).show(); break; case 2: Toast.makeText(context, "标签", 2000).show(); break; } } }); return builder.create(); } private Dialog ShowTagDialog(String tag) { AlertDialog.Builder builder = new AlertDialog.Builder(context); builder.setTitle(tag) .setItems(R.array.tag_opt, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { // The 'which' argument contains the index position // of the selected item } }); return builder.create(); } /** * ViewHolder类用以储存item中控件的引用 */ final class ViewHolder { ImageView image; TextView content; TextView create_time; TextView create_date; TextView create_week; } final class ViewTagHolder { ImageView image; TextView tag; TextView content; TextView create_time; TextView create_date; TextView create_week; } final class ViewHeaderHolder { TextView list_section; } @Override public int getCount() { return values.size(); } @Override public Object getItem(int position) { // TODO Auto-generated method stub return null; } @Override public long getItemId(int position) { return position; } @Override public int getItemViewType(int position) { // 异常情况处理 if (null == values || position < 0|| position > getCount()) { return TYPE_ITEM; } int type = values.get(position).getType(); switch(type) { case 0: return TYPE_CATEGORY_ITEM; case 1: return TYPE_ITEM; case 2: return TYPE_TAG_ITEM; } return TYPE_ITEM; } @Override public int getViewTypeCount() { return 3; } }