package com.novelbook.android.adapter; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.CheckBox; import android.widget.CompoundButton; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; import com.novelbook.android.R; import com.novelbook.android.utils.Fileutil; import java.io.File; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import butterknife.BindView; import butterknife.ButterKnife; public class FileAdapter extends BaseAdapter { private List files; private HashMap checkMap = new HashMap<>(); private Context context; private CheckedChangeListener mCheckedChangeListener; public FileAdapter(Context context) { this.context = context; } public FileAdapter(Context context, List files) { this.context = context; this.files = files; initCheckMap(); } private void initCheckMap(){ if (files != null) { for (File file : files) { checkMap.put(file, false); } } } @Override public int getCount() { if (files == null) { return 0; } return files.size(); } @Override public Object getItem(int position) { return files.get(position); } @Override public long getItemId(int position) { return position; } //全选 public void checkAll(){ Iterator iter = checkMap.entrySet().iterator(); while (iter.hasNext()) { Map.Entry entry = (Map.Entry) iter.next(); checkMap.put((File) entry.getKey(),true); } notifyDataSetChanged(); } //取消 public void cancel(){ Iterator iter = checkMap.entrySet().iterator(); while (iter.hasNext()) { Map.Entry entry = (Map.Entry) iter.next(); checkMap.put((File) entry.getKey(),false); } notifyDataSetChanged(); } //选择的数目 public int getCheckNum(){ int num = 0; Iterator iter = checkMap.entrySet().iterator(); while (iter.hasNext()) { Map.Entry entry = (Map.Entry) iter.next(); if ((Boolean) entry.getValue()){ num++; } } return num; } public List getCheckFiles(){ List files = new ArrayList<>(); Iterator iter = checkMap.entrySet().iterator(); while (iter.hasNext()) { Map.Entry entry = (Map.Entry) iter.next(); if ((Boolean) entry.getValue()){ files.add((File) entry.getKey()); } } return files; } public HashMap getCheckMap(){ return checkMap; } public List getFiles() { return files; } public void setFiles(List files) { this.files = files; initCheckMap(); notifyDataSetChanged(); } @Override public View getView(final int position, View convertView, ViewGroup parent) { final ViewHolder viewHolder; final File file = files.get(position); if (convertView == null) { convertView = LayoutInflater.from(context).inflate( R.layout.zadapter_file_item, null); viewHolder = new ViewHolder(convertView); convertView.setTag(viewHolder); } else { viewHolder = (ViewHolder) convertView.getTag(); } //CheckBox状态变化监听 viewHolder.checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { checkMap.put(file,isChecked); if (mCheckedChangeListener != null){ mCheckedChangeListener.onCheckedChanged(position,buttonView,isChecked); } } }); initFileData(file,viewHolder); initCheckBox(file,viewHolder); return convertView; } private void initCheckBox(File file,ViewHolder viewHolder){ if (checkMap.get(file) != null) { viewHolder.checkBox.setChecked(checkMap.get(file)); } } private void initFileData(File file,ViewHolder viewHolder){ //设置文件名 viewHolder.textView.setText(file.getName()); //文件夹和文件逻辑判断 if (file.isDirectory()) { viewHolder.fileIcon.setImageResource(R.mipmap.folder); viewHolder.checkBox.setVisibility(View.INVISIBLE); viewHolder.textSize.setText("项"); } else { viewHolder.fileIcon.setImageResource(R.mipmap.file_type_txt); viewHolder.checkBox.setVisibility(View.VISIBLE); viewHolder.textSize.setText(Fileutil.formatFileSize(file.length())); } } static class ViewHolder { @BindView(R.id.tv_file_text) TextView textView; @BindView(R.id.tv_file_text_size) TextView textSize; @BindView(R.id.iv_file_icon) ImageView fileIcon; @BindView(R.id.cb_file_image) CheckBox checkBox; @BindView(R.id.ll_file_lin) LinearLayout linearLayout; public ViewHolder(View view) { ButterKnife.bind(this, view); } } public void setCheckedChangeListener(CheckedChangeListener checkedChangeListener){ mCheckedChangeListener = checkedChangeListener; } public interface CheckedChangeListener{ void onCheckedChanged(int position, CompoundButton buttonView, boolean isChecked); } }