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
- BaseAdapter的使用
- BaseAdapter的使用
- BaseAdapter的使用
- BaseAdapter的使用
- ListView -- BaseAdapter的使用
- BaseAdapter的使用
- 关于BaseAdapter的使用
- BaseAdapter的使用
- BaseAdapter的使用
- BaseAdapter的使用
- listview的使用----BaseAdapter
- BaseAdapter的使用
- Android BaseAdapter的使用
- BaseAdapter的使用
- 关于BaseAdapter的使用
- BaseAdapter 的使用
- 优化使用的BaseAdapter
- ListView+BaseAdapter的使用
- STM32之FLASH操作
- git仓库的创建与添加文件
- rxjava+retrofit简单demo
- BigDecimal的用法
- 入职学习(4)--一个程序员的成长史(24)
- BaseAdapter的使用
- 第四天作业
- 数据算法之二叉树查找(BinaryTreeL Search)的Java实现
- 指针的使用和运算
- ZCMU-训练赛-Primary Arithmetic
- BZOJ 1030: [JSOI2007]文本生成器 DP,AC自动机
- Android Studio之maven Central,JCenter(build.gradle、gradle-wrapper.properties、gradle.properties)
- Linux作网络系统-资源占用优化配置 参照网络系统cisco IOS
- 自定义筛选控件HYSelectedView