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
- Android局域网发送文件(四)
- Android 局域网发送文件(三)
- Android局域网发送文件(一)
- Android局域网发送文件(二)
- 局域网发送文件的源代码(idUDPserver,idUDPClient)
- 局域网聊天工具(可发送图片与文件)
- 局域网聊天工具(可发送图片与文件)
- android 局域网聊天工具(可发送文字/语音)
- Android如何在局域网中发送广播
- 局域网内发送文件的例子(IdUdpClient,IdUdpServer)
- 邮件发送(四)
- Android ilbc 语音对话示范(四)发送方代码
- Android ilbc 语音对话示范(四)发送方代码
- UE4 局域网斗地主(四)
- 基于openfire+smack开发Android即时聊天应用[四]-单人聊天、群聊、发送接收文件等
- 基于openfire+smack开发Android即时聊天应用[四]-单人聊天、群聊、发送接收文件等
- 基于openfire+smack开发Android即时聊天应用[四]-单人聊天、群聊、发送接收文件等
- 无法访问共享文件(局域网)
- 我的长期计划
- 技术面试的方式
- java中负数的二进制表示
- JavaScript世界的一等公民 - 函数
- Base64编码原理及编码、解码实现
- Android局域网发送文件(四)
- Hdu 4701 Game -- DP
- 2013年9月30日、十一八天乐你学你快乐!|如何在eclipse jee中创建Maven project并且转换为Dynamic web project
- 我的必读书单及下载链接[百度网盘]
- JPS 工具, 显示当前Java进程
- js获取鼠标位置(兼容ie和火狐)
- 网站被黑客攻击导致降权,怎么办?
- C++标准库 vector排序
- java中的static测试一例