205 lines
		
	
	
		
			5.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
			
		
		
	
	
			205 lines
		
	
	
		
			5.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
| 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<File> files;
 | |
|     private HashMap<File,Boolean> checkMap = new HashMap<>();
 | |
| 
 | |
|     private Context context;
 | |
|     private CheckedChangeListener mCheckedChangeListener;
 | |
| 
 | |
|     public FileAdapter(Context context) {
 | |
|         this.context = context;
 | |
|     }
 | |
| 
 | |
|     public FileAdapter(Context context, List<File> 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<File> getCheckFiles(){
 | |
|         List<File> 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<File,Boolean> getCheckMap(){
 | |
|         return checkMap;
 | |
|     }
 | |
| 
 | |
|     public List<File> getFiles() {
 | |
|         return files;
 | |
|     }
 | |
| 
 | |
|     public void setFiles(List<File> 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);
 | |
|     }
 | |
| }
 |