Android局域网发送文件(四)

来源:互联网 发布:手机淘宝网商城首页 编辑:程序博客网 时间:2024/05/17 06:55

在前几篇博客中我们已经将主要的用到的知识都介绍完了,最后做个收尾,为大家介绍一下我们选择文件那部分,其实非常简单,主要涉及到的就是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);     }                @Overridepublic int getCount() {// TODO Auto-generated method stubreturn file_list.size();}@Overridepublic Object getItem(int position) {// TODO Auto-generated method stubreturn null;}@Overridepublic long getItemId(int position) {// TODO Auto-generated method stubreturn 0;}@Overridepublic 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() {@Overridepublic 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() {@Overridepublic 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

 

原创粉丝点击