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);
|
|
}
|
|
}
|