BaseAdapter的使用

来源:互联网 发布:c语言标准函数库百度云 编辑:程序博客网 时间:2024/05/16 11:06
import android.content.Context;import android.content.res.Resources;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.graphics.Color;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.CheckBox;import android.widget.ImageView;import android.widget.TextView;import com.example.songyan.filemanager.R;import org.w3c.dom.Text;import java.io.File;import java.text.SimpleDateFormat;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import android.os.Handler;import android.os.Message;public class FileInfoAdapter extends BaseAdapter {    private static final String TAG="FileInfoAdapter";    private static final int DEFAULT_SECONDARY_SIZE_TEXT__COLOR=0xff414141;    private static final int DEFAULT_PRIMARY_TEXT_COLOR= Color.BLACK;    private static final float CUT_ICON_ALPHA=0.6f;    private static final float HIDE_ICON_ALPHA=0.3f;    private static final float DEFAULT_ICON_ALPHA=1f;    public static final int MODE_NORMAL=0;    public static final int MODE_EDIT=1;    public static final int MODE_SEARCH=2;    private Context mContext;    private final Resources mResources;    private final LayoutInflater mInflater;    private final List<FileInfo> mFileInfoList;    private final FileInfoManager mFileInfoManager;    private int mMode=MODE_NORMAL;    FileManagerService mService=null;    private Map<String,Bitmap> mIconListMap=null;    private int myThreadCount=0;    public FileInfoAdapter(Context context,FileManagerService fileManagerService,                           FileInfoManager fileInfoManager){        mContext=context;        mResources=context.getResources();        mInflater=LayoutInflater.from(context);        mService=fileManagerService;        mFileInfoManager=fileInfoManager;        mFileInfoList=fileInfoManager.getShowFileList();        mIconListMap=new HashMap<String,Bitmap>();    }    //这个方法得到fileInfoList中特定fileInfo项的索引    public int getPosition(FileInfo fileInfo){        return mFileInfoList.indexOf(fileInfo);    }    //这个方法设置item的check boxes    public void setChecked(int id,boolean checked){        FileInfo checkInfo=mFileInfoList.get(id);        if(checkInfo!=null){            checkInfo.setChecked(checked);        }    }    //This method sets all item's check boxes    public void setAllItemChecked(boolean checked){        for(FileInfo info:mFileInfoList){            info.setChecked(checked);        }        notifyDataSetChanged();    }    //This method gets the number of the checked items    public int getCheckedItemsCount(){        int count=0;        for(FileInfo fileInfo:mFileInfoList){            if(fileInfo.isDirectory()){                count++;            }        }        return count;    }    //This method gets the list of the checked items    public List<FileInfo>getCheckedFileInfoItemList(){        List<FileInfo>fileInfoCheckedList=new ArrayList<FileInfo>();        for(FileInfo fileInfo:mFileInfoList){            if(fileInfo.isChecked()){                fileInfoCheckedList.add(fileInfo);            }        }        return fileInfoCheckedList;    }    //This method gets the first item in the list of the checked items    public FileInfo getFirstCheckedFileInfoItem(){        for(FileInfo fileInfo:mFileInfoList){            if(fileInfo.isChecked()){                return fileInfo;            }        }        return null;    }    //This method gets the count of the items in the name List    //这是继承BaseAdapter必须要重写的方法    @Override    public int getCount(){        return mFileInfoList.size();    }    //This method gets the name of the item at the specified position    @Override    public FileInfo getItem(int pos){        return mFileInfoList.get(pos);    }    //This method gets the item id at the specific position    @Override    public long getItemId(int pos){        return pos;    }    //This method change all checked items to be unchecked state    private void clearChecked(){        for(FileInfo fileInfo:mFileInfoList){            if(fileInfo.isChecked()){                fileInfo.setChecked(false);            }        }    }    //This method changes the display mode of adapter between MODE_NORMAL,MODE_EDIT,and MODE_SEARCH    public void changeMode(int mode){        LogUtils.d(TAG,"changMode,mode="+mode);        switch (mode){            case MODE_NORMAL:                clearChecked();                break;            case MODE_SEARCH:                mFileInfoList.clear();                break;            default:                break;        }        mMode=mode;        notifyDataSetChanged();    }    //This method gets current display mode of the adapter    public int getMode(){        return mMode;    }    //This method checks that current mode equals to certain mode,or not    public boolean isMode(int mode){        return mMode==mode;    }    //This method gets the view for each item to be displayed in the list view    @Override    public View getView(int pos, View convertView, ViewGroup parent){        LogUtils.d(TAG,"getView,pos="+pos+",mMode="+mMode);        FileViewHolder viewHolder;        View view=convertView;        if(view==null){            view=mInflater.inflate(R.layout.adapter_fileinfos,null);            viewHolder=new FileViewHolder((TextView)view.findViewById(R.id.edit_adapter_name),                    (TextView)view.findViewById(R.id.edit_adapter_size_time),(ImageView)view                    .findViewById(R.id.edit_adapter_img),(CheckBox)view.findViewById(R.id.edit_select),                            (ImageView)view.findViewById(R.id.edit_entry_arrow));            view.setTag(viewHolder);//设置标签        }else {            viewHolder=(FileViewHolder)view.getTag();        }        FileInfo currentItem=mFileInfoList.get(pos);        if(currentItem.isDirectory()){            viewHolder.mArrow.setVisibility(View.VISIBLE);        }else {            viewHolder.mArrow.setVisibility(View.GONE);        }        viewHolder.mName.setText(currentItem.getShowName());        viewHolder.mName.setTextColor(DEFAULT_PRIMARY_TEXT_COLOR);        view.setBackgroundColor(Color.TRANSPARENT);        switch (mMode){            case MODE_EDIT:                if(currentItem.isChecked()){                    viewHolder.mCheckBox.setChecked(true);                }else{                    viewHolder.mCheckBox.setChecked(false);                }                viewHolder.mCheckBox.setVisibility(View.VISIBLE);                setSizeText(viewHolder.mSize,currentItem);                break;            case MODE_NORMAL:                viewHolder.mCheckBox.setVisibility(View.GONE);                setSizeText(viewHolder.mSize,currentItem);                break;            case MODE_SEARCH:                setSearchSizeText(viewHolder.mSize,currentItem);                break;            default:                break;        }        setIcon(viewHolder,currentItem,parent.getLayoutDirection());        return view;    }    private void setSearchSizeText(TextView textView,FileInfo fileInfo){        textView.setText(fileInfo.getShowParentPath());        textView.setVisibility(View.VISIBLE);    }    private void setSizeText(TextView textView,FileInfo fileInfo){        if(fileInfo.isDirectory()){            if(MountPointManager.getInstance().isMountPoint(fileInfo.getFileAbsolutePath())){                StringBuilder sb=new StringBuilder();                String freeSpaceString=FileUtils.sizeToString(MountPointManager.getInstance().                getMountPointFreeSpace(fileInfo.getFileAbsolutePath()));                String totalSpace=FileUtils.sizeToString(MountPointManager.getInstance().                getMountPointTotalSpace(fileInfo.getFileAbsolutePath()));                LogUtils.d(TAG,"setSizeText,file name="+fileInfo.getFileName()+",file path="                +fileInfo.getFileAbsolutePath());                LogUtils.d(TAG,"setSizeText,freeSpace="+MountPointManager.getInstance().                getMountPointFreeSpace(fileInfo.getFileAbsolutePath())+",totalSpace="                        +MountPointManager.getInstance().getMountPointTotalSpace(fileInfo.                        getFileAbsolutePath()));                sb.append(mResources.getString(R.string.free_space)).append(" ");                sb.append(freeSpaceString).append(" \n");                sb.append(mResources.getString(R.string.total_space)).append(" ");                sb.append(totalSpace).append(" ");                textView.setText(sb.toString());                textView.setVisibility(View.VISIBLE);            }else{                StringBuilder sbFile=new StringBuilder();                String filesCount=mResources.getQuantityString(R.plurals.files_count,fileInfo.getFilesCount(),                        fileInfo.getFilesCount());//第一个getFilesCount是得到文件的数目进行判断,第二个是传入具体的数量                sbFile.append(filesCount).append(" ").append(getFormatTime(fileInfo.getFileLastModifiedTime()));                textView.setText(sbFile.toString());            }        }else{            StringBuilder sb=new StringBuilder();            sb.append(fileInfo.getFileSizeStr()).append(" ").append(getFormatTime(fileInfo.getFileLastModifiedTime()));            textView.setText(sb.toString());            textView.setVisibility(View.VISIBLE);        }    }    private String getFormatTime(long LastModifiedTime){        SimpleDateFormat sdformat=new SimpleDateFormat("yyyy-MM-dd HH:mm");        return sdformat.format(LastModifiedTime);    }    private void setIcon(FileViewHolder viewHolder,FileInfo fileInfo,int viewDirection){        Bitmap icon=null;        if(mIconListMap.containsKey(fileInfo.getFileAbsolutePath())){            icon=mIconListMap.get(fileInfo.getFileAbsolutePath());        }else{            if(fileInfo.isDirectory()){                icon= BitmapFactory.decodeResource(mResources,R.drawable.ic_file_dir);            }else{                icon=BitmapFactory.decodeResource(mResources,R.drawable.ic_file_image);            }            if(myThreadCount<=10){                loadImage(mResources,fileInfo,mService,viewDirection);            }            viewHolder.mIcon.setImageBitmap(icon);            viewHolder.mIcon.setAlpha(DEFAULT_ICON_ALPHA);            if(FileInfoManager.PASTE_MODE_CUT==mFileInfoManager.getPasteType()){                if(mFileInfoManager.isPasteItem(fileInfo)){                    viewHolder.mIcon.setAlpha(CUT_ICON_ALPHA);                }            }            if(fileInfo.isHideFile()){                viewHolder.mIcon.setAlpha(HIDE_ICON_ALPHA);            }        }    }    final Handler mHandler=new Handler() {        @Override        public void handleMessage(Message msg) {            switch (msg.what){                case 0:                    notifyDataSetChanged();                    myThreadCount--;                    break;                default:                    break;            }        }    };    private void loadImage(Resources res,final FileInfo fileInfo,FileManagerService service,final int viewDirection){        myThreadCount++;        Thread thread=new Thread(){            @Override            public void run() {                Bitmap icon=IconManager.getInstance().getIcon(mResources,fileInfo,mService,viewDirection);                if(!mIconListMap.containsKey(fileInfo.getFileAbsolutePath())){                    mIconListMap.put(fileInfo.getFileAbsolutePath(),icon);                }                mHandler.sendEmptyMessage(0);            }        };        thread.start();        thread=null;    }    static class FileViewHolder{        protected TextView mName;        protected TextView mSize;        protected ImageView mIcon;        protected CheckBox mCheckBox;        protected ImageView mArrow;        public FileViewHolder(TextView name,TextView size,ImageView icon,CheckBox checkbox,ImageView arrow){            this.mName=name;            this.mSize=size;            this.mIcon=icon;            this.mCheckBox=checkbox;            this.mArrow=arrow;        }    }}protected FileInfoAdapter mAdapter=null;protected ListView mListView=null;mAdapter.notifyDataSetChanged();mListView.setAdapter(mAdapter);

0 0
原创粉丝点击