Android Open Source - Music-Share-Android Music List Adapter






From Project

Back to project page Music-Share-Android.

License

The source code is released under:

GNU General Public License

If you think the Android project Music-Share-Android listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

package com.paperairplane.music.share;
// w w w. j  a  v a2  s. c  om
import java.util.Arrays;
import java.util.Comparator;
import java.util.HashMap;

import android.content.Context;
import android.content.SharedPreferences;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.SectionIndexer;
import android.widget.TextView;

import com.paperairplane.music.share.R;
import com.paperairplane.music.share.cache.ImageLoader;

/**
 * ?????????ListView?Adapater
 * 
 * @author Harry Chen (<a href="mailto:chenshengqi1@gmail.com">Harry Chen</a>)
 * @author Xavier Yao (<a href="mailto:xavieryao@me.com">Xavier Yao</a>)
 * @see <a
 *      href="http://www.github.com/PaperAirPlane-Dev-Team/Music-Share-Android">Our
 *      GitHub</a>
 */
public class MusicListAdapter extends BaseAdapter implements SectionIndexer {
  private Context mContext;
  private MusicData mMusicDatas[];
  private HashMap<Character, Integer> mSectionMap;
  private Character[] mSectionCharArr;
  private boolean mIsTextColorSet, mHasUnknownChar;
  private int mTextColor;
  private ImageLoader mImageLoader;
  
  /**
   * ????
   * 
   * @param context
   *            App???
   * @param musicdatas
   *            ???????????????
   */
  public MusicListAdapter(Context context, MusicData musicdatas[]) {
    mContext = context;
    mMusicDatas = musicdatas;// ????Cursor?
    mImageLoader = new ImageLoader(mContext, mMusicDatas);
    Arrays.sort(mMusicDatas, new Comparator<MusicData>() {
      @Override
      public int compare(MusicData lhs, MusicData rhs) {
        return lhs.compareTo(rhs);
      }
    });
    int length = mMusicDatas.length;
    mSectionMap = new HashMap<Character, Integer>();
    char charTemp = 0, charNow;// ??????????????
    for (int i = length - 1; i >= 0; i--) {
      charNow = mMusicDatas[i].getFirstChar();
      if (charTemp == charNow) {
        mSectionMap.remove(charTemp);
      }
      charTemp = mMusicDatas[i].getFirstChar();
      mSectionMap.put(charTemp, i);
      /*
       * ???????,???????,????????,??????????????????????? ????????????
       */
    }
    if (mMusicDatas[mMusicDatas.length - 1].getFirstChar() == Consts.UNKNOWN_CHAR) {
      mHasUnknownChar = true;
    }
    mIsTextColorSet = false;
    SharedPreferences preference = mContext.getSharedPreferences(
        Consts.Preferences.GENERAL, Context.MODE_PRIVATE);
    String color=preference
        .getString(Consts.Preferences.TEXT_COLOR, "");
    if (!color.equals("")) {
      mTextColor = android.graphics.Color.parseColor(color);
      mIsTextColorSet = true;
    }
  }
  
  public int getCount() {
    // if (mMusicDatas != null) {
    return mMusicDatas.length;
    // }
    // return 0;
  }

  public Object getItem(int position) {
    return mMusicDatas[position];
  }

  public long getItemId(int position) {
    return position;
  }

  public View getView(int position, View convertView, ViewGroup parent) {
    ViewHolder holder = null;//?????????????????????
    if (convertView == null) {
      convertView = LayoutInflater.from(mContext).inflate(
          R.layout.musiclist_item, null);
      holder = new ViewHolder();
      holder.tvTitle = (TextView) convertView
          .findViewById(R.id.musicname);
      holder.tvArtist = (TextView) convertView.findViewById(R.id.singer);
      holder.ivArtwork = (ImageView) convertView.findViewById(R.id.imageView1);
      
      convertView.setTag(holder);
    } else {
      holder = (ViewHolder) convertView.getTag();
    }
    holder.tvTitle.setText(mMusicDatas[position].getTitle());
    holder.tvArtist.setText(mMusicDatas[position].getArtist());
    holder.ivArtwork.setImageResource(R.drawable.albumart_mp_unknown_list);
    
    mImageLoader.DisplayImage(
        "" + mMusicDatas[position].getAlbumId(),
        holder.ivArtwork,
        false);
    
    if (mIsTextColorSet) {
      holder.tvArtist.setTextColor(mTextColor);
      holder.tvTitle.setTextColor(mTextColor);
    }
    return convertView;
  }

  private static class ViewHolder {
    TextView tvTitle;
    TextView tvArtist;
    ImageView ivArtwork;
  }

  @Override
  public int getPositionForSection(int section) {
    char sectionChar = mSectionCharArr[section];
    if (mHasUnknownChar && section == mSectionMap.size() - 1)
      // ????????
      sectionChar = Consts.UNKNOWN_CHAR;
    int position = mSectionMap.get(sectionChar);
    return position;
  }

  @Override
  public int getSectionForPosition(int position) {
    int section = 0;
    char charNow = mMusicDatas[position].getFirstChar();
    for (char charTemp : mSectionCharArr) {
      if (charNow != charTemp) {
        section++;
        continue;
      }
      if (charNow == charTemp) {
        break;
      }
    }
    if (charNow == Consts.UNKNOWN_CHAR) {
      // ??????????, ?????????????????????????
      return mSectionMap.size() - 1;
    }
    return section;
  }

  @Override
  public Object[] getSections() {
    // char[] s = "ABCDEFGHIJKLMNOPQRSTUVWXYZ#".toCharArray();
    int arraySize = mSectionMap.size();
    mSectionCharArr = new Character[arraySize];
    mSectionCharArr = mSectionMap.keySet().toArray(mSectionCharArr);
    
    // Sort
    for (int i = 0; i < arraySize; i++) {
      for (int j = 0; j < arraySize; j++) {
        if (mSectionCharArr[i].charValue() < mSectionCharArr[j].charValue()) {
          Character c = mSectionCharArr[i];
          mSectionCharArr[i] = mSectionCharArr[j];
          mSectionCharArr[j] = c;
        }
      }
    }

    /*
     * ????????????????????ArrayIndexOutOfBound???? ?????????, ??????????????-1,
     * ???arraySize?0 ???????????,??????????
     */
    return mSectionCharArr;
  }

}




Java Source Code List

android.net.http.SslError.java
com.paperairplane.music.share.AtSuggestionActivity.java
com.paperairplane.music.share.Consts.java
com.paperairplane.music.share.FeedbackMessage.java
com.paperairplane.music.share.Main.java
com.paperairplane.music.share.MusicData.java
com.paperairplane.music.share.MusicListAdapter.java
com.paperairplane.music.share.QueryAndShareMusicInfo.java
com.paperairplane.music.share.Receiver.java
com.paperairplane.music.share.SnsHelper.java
com.paperairplane.music.share.cache.ImageLoader.java
com.paperairplane.music.share.cache.MemoryCache.java
com.paperairplane.music.share.dialogs.AboutDialogFragment.java
com.paperairplane.music.share.dialogs.AbsDialogFragment.java
com.paperairplane.music.share.dialogs.AuthManagerDialogFragment.java
com.paperairplane.music.share.dialogs.BackgroundChooserDialogFragment.java
com.paperairplane.music.share.dialogs.ChangeColorDialogFragment.java
com.paperairplane.music.share.dialogs.EmptyDialogFragment.java
com.paperairplane.music.share.dialogs.FeedbackDialogFragment.java
com.paperairplane.music.share.dialogs.SearchDialogFragment.java
com.paperairplane.music.share.dialogs.SendWeiboDialogFragment.java
com.paperairplane.music.share.dialogs.ThankDialogFragment.java
com.paperairplane.music.share.utils.CrashHandler.java
com.paperairplane.music.share.utils.HanziToPinyin.java
com.paperairplane.music.share.utils.HttpQuestHandler.java
com.paperairplane.music.share.utils.IntentResolver.java
com.paperairplane.music.share.utils.MyLogger.java
com.paperairplane.music.share.utils.ShakeDetector.java
com.paperairplane.music.share.utils.Utilities.java
com.paperairplane.music.share.utils.lastfm.Album.java
com.paperairplane.music.share.utils.lastfm.Artist.java
com.paperairplane.music.share.utils.lastfm.Caller.java
com.paperairplane.music.share.utils.lastfm.DomElement.java
com.paperairplane.music.share.utils.lastfm.ImageHolder.java
com.paperairplane.music.share.utils.lastfm.ImageSize.java
com.paperairplane.music.share.utils.lastfm.Image.java
com.paperairplane.music.share.utils.lastfm.ItemFactoryBuilder.java
com.paperairplane.music.share.utils.lastfm.ItemFactory.java
com.paperairplane.music.share.utils.lastfm.MapUtilities.java
com.paperairplane.music.share.utils.lastfm.MusicEntry.java
com.paperairplane.music.share.utils.lastfm.PaginatedResult.java
com.paperairplane.music.share.utils.lastfm.ResponseBuilder.java
com.paperairplane.music.share.utils.lastfm.Result.java
com.paperairplane.music.share.utils.lastfm.StringUtilities.java
com.paperairplane.music.share.utils.lastfm.Track.java
com.weibo.sdk.android.Oauth2AccessToken.java
com.weibo.sdk.android.WeiboAuthListener.java
com.weibo.sdk.android.WeiboDialogError.java
com.weibo.sdk.android.WeiboDialog.java
com.weibo.sdk.android.WeiboException.java
com.weibo.sdk.android.WeiboParameters.java
com.weibo.sdk.android.Weibo.java
com.weibo.sdk.android.api.AccountAPI.java
com.weibo.sdk.android.api.ActivityInvokeAPI.java
com.weibo.sdk.android.api.CommentsAPI.java
com.weibo.sdk.android.api.CommonAPI.java
com.weibo.sdk.android.api.FavoritesAPI.java
com.weibo.sdk.android.api.FriendshipsAPI.java
com.weibo.sdk.android.api.PlaceAPI.java
com.weibo.sdk.android.api.RegisterAPI.java
com.weibo.sdk.android.api.SearchAPI.java
com.weibo.sdk.android.api.ShortUrlAPI.java
com.weibo.sdk.android.api.StatusesAPI.java
com.weibo.sdk.android.api.SuggestionsAPI.java
com.weibo.sdk.android.api.TagsAPI.java
com.weibo.sdk.android.api.TrendsAPI.java
com.weibo.sdk.android.api.UsersAPI.java
com.weibo.sdk.android.api.WeiboAPI.java
com.weibo.sdk.android.net.AsyncWeiboRunner.java
com.weibo.sdk.android.net.HttpManager.java
com.weibo.sdk.android.net.NetStateManager.java
com.weibo.sdk.android.net.RequestListener.java
com.weibo.sdk.android.sso.SsoHandler.java
com.weibo.sdk.android.util.BitmapHelper.java
com.weibo.sdk.android.util.Utility.java