在前几篇博客中我们已经将主要的用到的知识都介绍完了,最后做个收尾,为大家介绍一下我们选择文件那部分,其实非常简单,主要涉及到的就是adapter和listview
/** * 显示文件及目录的adapter * @author * */ public final class ViewHolder{ public ImageView file_type; public TextView file_name; public TextView file_time; public CheckBox ch; } public class MyAdapter extends BaseAdapter { HashMap<Integer, Boolean> state = new HashMap<Integer,Boolean>(); private LayoutInflater mInflater; public MyAdapter(Context context) { this.mInflater=LayoutInflater.from(context); } @Override public int getCount() { // TODO Auto-generated method stub return file_list.size(); } @Override public Object getItem(int position) { // TODO Auto-generated method stub return null; } @Override public long getItemId(int position) { // TODO Auto-generated method stub return 0; } @Override public View getView(final int position, View convertView, ViewGroup parent) { ViewHolder holder=new ViewHolder(); convertView=mInflater.inflate(R.layout.file_list_item, null); holder.file_type=(ImageView) convertView.findViewById(R.id.file_type); holder.file_name=(TextView) convertView.findViewById(R.id.file_name); holder.file_time=(TextView) convertView.findViewById(R.id.file_time); holder.ch=(CheckBox)convertView.findViewById(R.id.file_check); convertView.setTag(holder); holder.ch.setOnCheckedChangeListener(new OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { // TODO Auto-generated method stub if(isChecked) { //选中这个复选框则将它封装到一个FileName里,最后加入到fileNamespace这个ArrayList里面 state.put(position, isChecked); sa[i]=nowname+"/"+(String)file_list.get(position).get("file_name"); File file=new File(sa[i]); ss[i]=file.length(); Toast.makeText(FileListActivity.this, "选中了"+sa[i], Toast.LENGTH_SHORT).show(); FileName f=new FileName(1,sa[i],ss[i],false); fileNames.add(f); i=i+1; }else{ //取消选中,去掉这个FileName state.remove(position); i=i-1; String sName=nowname+"/"+(String)file_list.get(position).get("file_name"); System.out.println("`~~~~~~~~~~~~~~~~~~~~~~~~~~~"+sa.length); for(int m=0;m<i+1;m++) { if(sName.endsWith(sa[m])) { sa[m]=""; FileName f=new FileName(1,sa[m],ss[m],false); fileNames.remove(f); } } } } }); holder.file_type.setBackgroundResource((Integer)file_list.get(position).get("file_type")); holder.file_name.setText((String)file_list.get(position).get("file_name")); holder.file_time.setText((String)file_list.get(position).get("file_time")); holder.ch.setChecked(state.get(position)==null? false : true); return convertView; } }
用于显示listview的adapter,修复了复选框选中错误等bug;
/** * 文件的item的点击响应函数 */ //listview的每一个item的点击相应事件,如果是目录的话执行ListFile函数,继续打开这个目录,如果是文件则什么也不执行 listview.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { String nextname=(String)file_list.get(arg2).get("file_name"); nowname=nowname+"/"+nextname; System.out.println("$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$"+nextname); System.out.println(Environment.getExternalStorageDirectory().getAbsolutePath()+"/"+nextname); File ff=new File(nowname); if(ff.isDirectory()) { ListFile(nowname); }else { } } });
//设置每一个Item的点击监听,即如果是文件夹则继续进入,用到了listFile函数
/** * 展开目录内的文件的函数 * @param dirname */ public void ListFile(String dirname){ file_list.clear(); File f1=new File(dirname); if(f1.isDirectory())//判断是否为目录 { System.out.println("Directroy of"+dirname); //通过list()对目录内部进行判断 String s[]=f1.list(); if(s.length!=0) { for(int i=0;i<s.length;i++) { File f=new File(dirname+"/"+s[i]); if(f.isDirectory()) { System.out.println(s[i]+"is a Directroy"); long time = f.lastModified();//返回文件最后修改时间,是以个long型毫秒数 String ctime = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(new Date(time)); System.out.println(ctime); Map<String, Object> map=new HashMap<String, Object>(); map.put("file_name", s[i]); map.put("file_time", ctime); map.put("file_type", R.drawable.folder); file_list.add(map); }else { long time = f.lastModified();//返回文件最后修改时间,是以个long型毫秒数 String ctime = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(new Date(time)); System.out.println(ctime); Map<String, Object> map=new HashMap<String, Object>(); map.put("file_name", s[i]); map.put("file_time", ctime); if(s[i].contains(".txt")) { map.put("file_type", R.drawable.file_icon_txt); } else if(s[i].contains(".zip")) { map.put("file_type", R.drawable.file_icon_zip); } else if(s[i].contains(".pdf")) { map.put("file_type", R.drawable.file_icon_pdf); } else if(s[i].contains(".mp3")) { map.put("file_type", R.drawable.file_icon_mp3); } else if(s[i].contains(".png")||s[i].contains(".jpg")||s[i].contains(".jepg")||s[i].contains(".gif") ||s[i].contains(".bmp")) { map.put("file_type", R.drawable.file_icon_picture); } else if(s[i].contains(".mid")) { map.put("file_type", R.drawable.file_icon_mid); } else if(s[i].contains(".avi")||s[i].contains(".wma")||s[i].contains(".rmvb")||s[i].contains(".flash")|| s[i].contains(".rm")||s[i].contains(".mp4")) { map.put("file_type", R.drawable.file_icon_video); } else if(s[i].contains(".rar")) { map.put("file_type", R.drawable.file_icon_rar); } else if(s[i].contains(".xlsx")||s[i].contains(".docx")||s[i].contains(".xls")||s[i].contains(".doc")) { map.put("file_type", R.drawable.file_icon_office); }else { map.put("file_type", R.drawable.file_icon_default); } file_list.add(map); System.out.println(s[i]+"is a File"); } MyAdapter adapter=new MyAdapter(this); adapter.notifyDataSetChanged(); listview.setAdapter(adapter); //根据不同文件类型,选择不同的图标,最后在ListView内显示 } }else { Toast.makeText(FileListActivity.this, "该文件夹为空", Toast.LENGTH_SHORT).show(); MyAdapter adapter=new MyAdapter(this); adapter.notifyDataSetChanged(); listview.setAdapter(adapter); } }else { Toast.makeText(FileListActivity.this, "该文件夹为空", Toast.LENGTH_SHORT).show(); System.out.print(dirname+"is not a Directroy"); } }
根据不同的文件类型设置不同的图标,整个函数用于展开文件夹
整个局域网发送文件基本写完了,仔细研究一下还是能理解的
有问题的话809269978@qq.com