package cn.qylk.adapter;
import java.io.Closeable;
import java.io.IOException;
import java.util.HashSet;
import android.database.Cursor;
import android.graphics.Color;
import android.util.SparseBooleanArray;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.TextView;
import cn.qylk.R;
import cn.qylk.fragment.CommonAdapter;
/**
* 歌曲列表适配
*
* @author qylk2012
*
*/
public class MusicListAdapter extends BaseAdapter implements Closeable,CommonAdapter {
class ViewHolder {
public TextView artist;
public ImageButton Cbox;
public ImageView show;
public TextView title;
}
final static int TITLE = 4, ARTIST = 2, _ID = 0;
private int curID;
private LayoutInflater Inflater;
private SparseBooleanArray innerList;
private Cursor myCur;
private boolean OnActionMode;
private HashSet<Integer> selectedlist;
public MusicListAdapter(LayoutInflater Inflater, Cursor cur) {
myCur = cur;
this.Inflater = Inflater;
selectedlist = new HashSet<Integer>();
innerList = new SparseBooleanArray(cur.getCount());
}
public void ClearAllSelection() {
selectedlist.clear();
innerList.clear();
}
@Override
public void close() throws IOException {
myCur.close();
}
@Override
public int getCount() {
return myCur.getCount();
}
@Override
public Object getItem(int position) {
return position;
}
@Override
public long getItemId(int position) {
return position;
}
/**
* 获取所有已经选择的项目的id
*
* @return HashSet<Integer>
*/
public HashSet<Integer> GetSelectedHashSet() {
return selectedlist;
}
/**
* 获取所有已经选择的项目的id
*
* @return HashSet<Integer>
*/
public Integer[] GetSelectedList() {
return selectedlist.toArray(new Integer[selectedlist.size()]);
}
/**
* 是否处于ActionMode状态
*
* @return
*/
public boolean getState() {
return OnActionMode;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
convertView = Inflater.inflate(R.layout.musiclist_item, null);
holder = new ViewHolder();
holder.title = (TextView) convertView.findViewById(R.id.ltitle);
holder.artist = (TextView) convertView.findViewById(R.id.lartist);
holder.Cbox = (ImageButton) convertView.findViewById(R.id.checkBox);
holder.show = (ImageView) convertView.findViewById(R.id.music);
convertView.setTag(holder);// 以tag寻找更快
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.Cbox.setVisibility(OnActionMode ? View.VISIBLE : View.INVISIBLE);
myCur.moveToPosition(position);
StringBuilder sb = new StringBuilder().append(String.valueOf(position))
.append('.').append(myCur.getString(TITLE).trim());// 序号加标题
holder.show.setImageResource(R.drawable.songimage);// 歌曲图标
holder.title.setText(sb.toString());// 标题
int id = myCur.getInt(_ID);
holder.artist.setText(myCur.getString(ARTIST));// 艺术家显示
if (curID == id) {
holder.title.setTextColor(Color.BLUE);
holder.artist.setTextColor(Color.BLUE);
} else {
holder.title.setTextColor(Color.WHITE);
holder.artist.setTextColor(Color.WHITE);
}
holder.Cbox
.setBackgroundResource(innerList.get(position) ? R.drawable.checkbox_checked
: R.drawable.checkbox_unchecked);
return convertView;
}
/**
* 开启、关闭列表选择模式
*
* @param true:ON<br>
* false:OFF
* @param initpos
*/
public void OnActionMode(boolean on, int initpos) {
if (OnActionMode && on)
return;
ClearAllSelection();
if (on) {
myCur.moveToPosition(initpos);
selectedlist.add(myCur.getInt(_ID));
innerList.put(initpos, true);
}
OnActionMode = on;
notifyDataSetChanged();
}
/**
* 切换ActionMode下的选择项
*
* @param position
* 切换状态的位置
*/
public void ToggleSelection(int position) {
myCur.moveToPosition(position);
int id = myCur.getInt(_ID);
if (innerList.get(position)) {
selectedlist.remove(id);
innerList.put(position, false);
} else {
selectedlist.add(id);
innerList.put(position, true);
}
notifyDataSetChanged();
}
@Override
public void setId(int id) {
curID = id;
}
@Override
public CharSequence getFirstChar(int position) {
myCur.moveToPosition(position);
return myCur.getString(TITLE).subSequence(0,1);
}
@Override
public void RefreshList(Cursor c) {
this.myCur = c;
notifyDataSetChanged();
}
@Override
public Cursor getCursor() {
return myCur;
}
}