/* 变量声明      items:存放显示的名称     paths:存放文件路径     rootPath:起始目录         */  private List<String> items=null;  private List<String> paths=null;  private String rootPath="/";  private TextView mPath;

 /* 取得文件架构的方法 */  private void getFileDir(String filePath)  {    /* 设置目前所在路径 */    mPath.setText(filePath);    items=new ArrayList<String>();    paths=new ArrayList<String>();    File f=new File(filePath);      File[] files=f.listFiles();        if(!filePath.equals(rootPath))    {      /* 第一笔设置为[回到根目录] */      items.add("b1");      paths.add(rootPath);      /* 第二笔设置为[回到上一层] */      items.add("b2");      paths.add(f.getParent());    }    /* 将所有文件添加ArrayList中 */    for(int i=0;i<files.length;i++)    {      File file=files[i];      items.add(file.getName());      paths.add(file.getPath());    }        /* 使用自定义的MyAdapter来将数据传入ListActivity */    setListAdapter(new MyAdapter(this,items,paths));  }

/* 设置ListItem被点击时要做的动作 */  @Override  protected void onListItemClick(ListView l,View v,int position,                                 long id)  {    File file=new File(paths.get(position));    if (file.isDirectory())    {      /* 如果是文件夹就再运行getFileDir() */      getFileDir(paths.get(position));    }    else    {      /* 如果是文件就运行openFile() */      openFile(file);    }  }

 /* 在手机上打开文件的方法 */  private void openFile(File f)   {    Intent intent = new Intent();    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);    intent.setAction(android.content.Intent.ACTION_VIEW);        /* 调用getMIMEType()来取得MimeType */    String type = getMIMEType(f);    /* 设置intent的file与MimeType */    intent.setDataAndType(Uri.fromFile(f),type);    startActivity(intent);   }  /* 判断文件MimeType的方法 */  private String getMIMEType(File f)  {    String type="";    String fName=f.getName();    /* 取得扩展名 */    String end=fName.substring(fName.lastIndexOf(".")+1,                  fName.length()).toLowerCase();         /* 依附档名的类型决定MimeType */    if(end.equals("m4a")||end.equals("mp3")||end.equals("mid")       ||end.equals("xmf")||end.equals("ogg")||end.equals("wav"))    {      type = "audio";     }    else if(end.equals("3gp")||end.equals("mp4"))    {      type = "video";    }    else if(end.equals("jpg")||end.equals("gif")||end.equals("png")            ||end.equals("jpeg")||end.equals("bmp"))    {      type = "image";    }    else    {      /* 如果无法直接打开,就跳出软件列表给用户选择 */      type="*";    }    type += "/*";     return type;   }

最后为MyAdapter.java

/* import相关class */import java.io.File;import java.util.List;import android.content.Context;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.ImageView;import android.widget.TextView;/* 自定义的Adapter,继承android.widget.BaseAdapter */public class MyAdapter extends BaseAdapter{  /* 变量声明      mIcon1:回到根目录的图文件     mIcon2:回到上一层的图片     mIcon3:文件夹的图文件     mIcon4:文件的图片  */  private LayoutInflater mInflater;  private Bitmap mIcon1;  private Bitmap mIcon2;  private Bitmap mIcon3;  private Bitmap mIcon4;  private List<String> items;  private List<String> paths;  /* MyAdapter的构造器,传入三个参数  */    public MyAdapter(Context context,List<String> it,List<String> pa)  {    /* 参数初始化 */    mInflater = LayoutInflater.from(context);    items = it;    paths = pa;    mIcon1 = BitmapFactory.decodeResource(context.getResources(),                                          R.drawable.back01);    mIcon2 = BitmapFactory.decodeResource(context.getResources(),                                          R.drawable.back02);    mIcon3 = BitmapFactory.decodeResource(context.getResources(),                                          R.drawable.folder);    mIcon4 = BitmapFactory.decodeResource(context.getResources(),                                          R.drawable.doc);  }    /* 因继承BaseAdapter,需重写以下方法 */  @Override  public int getCount()  {    return items.size();  }  @Override  public Object getItem(int position)  {    return items.get(position);  }    @Override  public long getItemId(int position)  {    return position;  }    @Override  public View getView(int position,View convertView,ViewGroup par)  {    ViewHolder holder;        if(convertView == null)    {      /* 使用自定义的file_row作为Layout */      convertView = mInflater.inflate(R.layout.file_row, null);      /* 初始化holder的text与icon */      holder = new ViewHolder();      holder.text = (TextView) convertView.findViewById(R.id.text);      holder.icon = (ImageView) convertView.findViewById(R.id.icon);            convertView.setTag(holder);    }    else    {      holder = (ViewHolder) convertView.getTag();    }    File f=new File(paths.get(position).toString());    /* 设置[回到根目录]的文字与icon */    if(items.get(position).toString().equals("b1"))    {      holder.text.setText("Back to /");      holder.icon.setImageBitmap(mIcon1);    }    /* 设置[回到上一层]的文字与icon */    else if(items.get(position).toString().equals("b2"))    {      holder.text.setText("Back to ..");      holder.icon.setImageBitmap(mIcon2);    }    /* 设置[文件或文件夹]的文字与icon */    else    {      holder.text.setText(f.getName());      if(f.isDirectory())      {        holder.icon.setImageBitmap(mIcon3);      }      else      {        holder.icon.setImageBitmap(mIcon4);      }    }    return convertView;  }    /* class ViewHolder */  private class ViewHolder  {    TextView text;    ImageView icon;  }}

更多相关文章

  1. Android(安卓)断点续传下载
  2. LisetView Item高度设置无效
  3. Android(安卓)View动画——自定义View动画
  4. Poco库使用 CMake 编译,支持 NetSSL
  5. 错误:Android(安卓)requires compiler compliance level 5.0 or 6
  6. android 系统配置 常用命令 - linux
  7. 调用Android系统设置
  8. android 反编译操作
  9. Found libBaiduMapSDK_base_v4_3_0.so error

随机推荐

  1. Android(安卓)使用RecyclerVeiw加载复杂
  2. Android(安卓)UI开发第二十八篇——Fragm
  3. Unity的春天
  4. Android访问中央气象台的天气预报API得到
  5. Android中Activity启动模式详解
  6. Android(安卓)NDK区分第一次起机-sqlite3
  7. 浅谈android的selector背景选择器
  8. Android(安卓)开发艺术探索笔记之二 -- I
  9. Android实现导航菜单左右滑动效果
  10. Android(安卓)蓝牙模块