现在的位置: 首页 > 综合 > 正文

Android局域网发送文件(四)

2013年05月15日 ⁄ 综合 ⁄ 共 5463字 ⁄ 字号 评论关闭

在前几篇博客中我们已经将主要的用到的知识都介绍完了,最后做个收尾,为大家介绍一下我们选择文件那部分,其实非常简单,主要涉及到的就是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

 

抱歉!评论已关闭.