package com.kitty.poclient.adapter; import java.lang.ref.SoftReference; import java.util.List; import android.content.Context; import android.graphics.Bitmap; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.BaseExpandableListAdapter; import android.widget.ImageView; import android.widget.TextView; import com.nostra13.universalimageloader.core.DisplayImageOptions; import com.nostra13.universalimageloader.core.ImageLoader; import com.kitty.poclient.R; import com.kitty.poclient.common.Constant; import com.kitty.poclient.domain.Album; import com.kitty.poclient.domain.Artist; import com.kitty.poclient.domain.Music; import com.kitty.poclient.domain.SearchDataObject; import com.kitty.poclient.fragment.store.SearchFragment; import com.kitty.poclient.http.HttpPoster; import com.kitty.poclient.thread.Pools; import com.kitty.poclient.util.BitmapUtil; import com.kitty.poclient.util.LoadImageAysnc.ImageCallBack; public class SearchResultXListAdapter extends BaseExpandableListAdapter { private Context context; private SearchDataObject sdo; private SearchFragment fragment; private ImageLoader loader; private DisplayImageOptions options; public SearchResultXListAdapter(Context context, SearchFragment fragment) { this.context = context; this.fragment = fragment; loader = ImageLoader.getInstance(); options = new DisplayImageOptions.Builder().showImageOnLoading(R.drawable.pic).cacheInMemory(true).cacheOnDisc(true).considerExifParams(true).bitmapConfig(Bitmap.Config.RGB_565).build(); } public SearchDataObject getSdo() { return sdo; } public void setSdo(SearchDataObject sdo) { this.sdo = sdo; } @Override public int getGroupCount() { return 3; } @Override public int getChildrenCount(int groupPosition) { int childCount = 0; switch (groupPosition) { case 0: childCount = sdo.getAlbums().size();// null pointer break; case 1: childCount = sdo.getMusics().size(); break; case 2: childCount = sdo.getArtists().size(); break; } return childCount; } @Override public Object getGroup(int groupPosition) { return null; } @Override public Object getChild(int groupPosition, int childPosition) { return null; } @Override public long getGroupId(int groupPosition) { return 0; } @Override public long getChildId(int groupPosition, int childPosition) { return 0; } @Override public boolean hasStableIds() { return false; } @Override public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { convertView = LayoutInflater.from(context).inflate(R.layout.search_result_group_item, null); TextView tvDiscNo = (TextView) convertView.findViewById(R.id.tv_disc_no); String groupName = ""; switch (groupPosition) { case 0:// 专辑 if (sdo.getAlbums().size() >= HttpPoster.MAX_SEARCH_ITEM) { groupName = "专辑(大于" + sdo.getAlbums().size() + "个结果)"; } else { groupName = "专辑(" + sdo.getAlbums().size() + "个结果)"; } break; case 1:// 单曲 if (sdo.getMusics().size() >= HttpPoster.MAX_SEARCH_ITEM) { groupName = "单曲(大于" + sdo.getMusics().size() + "个结果)"; } else { groupName = "单曲(" + sdo.getMusics().size() + "个结果)"; } break; case 2:// 演出者 if (sdo.getArtists().size() >= HttpPoster.MAX_SEARCH_ITEM) { groupName = "演出者(大于" + sdo.getArtists().size() + "个结果)"; } else { groupName = "演出者(" + sdo.getArtists().size() + "个结果)"; } break; } tvDiscNo.setText(groupName); return convertView; } @Override public View getChildView(int groupPosition, final int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { ChildHolder holder; List list = null; switch (groupPosition) { case 0: list = sdo.getAlbums(); break; case 1: list = sdo.getMusics(); break; case 2: list = sdo.getArtists(); break; } if (convertView == null || convertView.getTag() == null) { convertView = LayoutInflater.from(context).inflate(R.layout.search_result_item, null); holder = new ChildHolder(convertView); convertView.setTag(holder); } else { holder = (ChildHolder) convertView.getTag(); } switch (groupPosition) { case 0: Album album = (Album) list.get(childPosition); holder.ivCoverBg.setVisibility(View.VISIBLE); holder.tvName.setText(album.getName()); holder.tvArtist.setText(album.getArtistName()); loader.displayImage(album.getImgUrl(), holder.ivCover, options); convertView.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { fragment.onAlbumItemClick(childPosition); } }); break; case 1: Music music = (Music) list.get(childPosition); holder.ivCoverBg.setVisibility(View.VISIBLE); holder.tvName.setText(((Music) list.get(childPosition)).getName()); holder.tvArtist.setText(((Music) list.get(childPosition)).getArtistName() + " - " + ((Music) list.get(childPosition)).getAlbumName()); loader.displayImage(music.getImgUrl(), holder.ivCover, options); convertView.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { fragment.onMusicItemClick(childPosition); } }); break; case 2: Artist artist = (Artist) list.get(childPosition); holder.ivCoverBg.setVisibility(View.VISIBLE); holder.ivCover.setImageBitmap(Constant.albumCover); holder.tvName.setText(artist.getName()); holder.tvArtist.setText(artist.getName()); /* * if (artist.getBitmap() != null && * !artist.getBitmap().isRecycled() && * !artist.getBitmap().equals(Constant.albumCover)) { * holder.ivCover.setImageBitmap(artist.getBitmap()); } else { * holder.ivCover.setImageBitmap(Constant.albumCover); * downloadBitmap(artist); } */ loader.displayImage(artist.getImgUrl(), holder.ivCover, options); convertView.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { fragment.onArtistItemClick(childPosition); } }); break; } return convertView; } private void downloadBitmap(final Album album) { Pools.executorService2.submit(new Runnable() { @Override public void run() { // Looper.prepare(); String imageKey = album.getImgUrl() + "150"; Bitmap bitmap = BitmapUtil.loadImageAysnc.loadImageNohandler(imageKey, album.getImgUrl(), 150, false, new ImageCallBack() { // 下载得到专辑封面后刷新界面 @Override public void imageLoaded(Bitmap bitmap) { if (bitmap != null && !bitmap.isRecycled()) { album.setBitmap(new SoftReference<Bitmap>(bitmap)); fragment.bitmaps.add(bitmap); notifyDataSetChanged(); } } }); // 从缓存中得到封面后刷新界面 if (bitmap != null && !bitmap.isRecycled()) { album.setBitmap(new SoftReference<Bitmap>(bitmap)); fragment.bitmaps.add(bitmap); notifyDataSetChanged(); } bitmap = null; // Looper.loop(); } }); } private void downloadBitmap(final Music music) { Pools.executorService2.submit(new Runnable() { @Override public void run() { // System.out.println("music.getImgUrl()="+music.getImgUrl()); String imageKey = music.getImgUrl() + "150"; Bitmap bitmap = BitmapUtil.loadImageAysnc.loadImageNohandler(imageKey, music.getImgUrl(), 150, false, new ImageCallBack() { // 下载得到专辑封面后刷新界面 @Override public void imageLoaded(Bitmap bitmap) { if (bitmap != null && !bitmap.isRecycled()) { music.setBitmap(new SoftReference<Bitmap>(bitmap)); fragment.bitmaps.add(bitmap); notifyDataSetChanged(); } } }); // 从缓存中得到封面后刷新界面 if (bitmap != null && !bitmap.isRecycled()) { music.setBitmap(new SoftReference<Bitmap>(bitmap)); fragment.bitmaps.add(bitmap); notifyDataSetChanged(); } bitmap = null; } }); } /* * private void downloadBitmap(final Artist artist) { * * Pools.executorService2.submit(new Runnable() { * * @Override public void run() { // Looper.prepare(); String imageKey = * artist.getImgUrl() + "150"; Bitmap bitmap = * BitmapUtil.loadImageAysnc.loadImageNohandler(imageKey, * artist.getImgUrl(), 150, false, new ImageCallBack() { * * // 下载得到专辑封面后刷新界面 * * @Override public void imageLoaded(Bitmap bitmap) { if (bitmap != null && * !bitmap.isRecycled()) { artist.setBitmap(new * SoftReference<Bitmap>(bitmap)); fragment.bitmaps.add(bitmap); * notifyDataSetChanged(); } } }); * * // 从缓存中得到封面后刷新界面 if (bitmap != null && !bitmap.isRecycled()) { * artist.setBitmap(new SoftReference<Bitmap>(bitmap)); * fragment.bitmaps.add(bitmap); notifyDataSetChanged(); } * * bitmap = null; // Looper.loop(); } }); * * } */ @Override public boolean isChildSelectable(int groupPosition, int childPosition) { // TODO Auto-generated method stub return false; } class ChildHolder { private ImageView ivCoverBg; private ImageView ivCover; private TextView tvName; private TextView tvArtist; ChildHolder(View convertView) { ivCoverBg = (ImageView) convertView.findViewById(R.id.iv_cover_bg); ivCover = (ImageView) convertView.findViewById(R.id.iv_album_cover); tvName = (TextView) convertView.findViewById(R.id.tv_album_name); tvArtist = (TextView) convertView.findViewById(R.id.tv_album_artist); } } }