设计思路:
1.首先得到sd卡目录,如果sd卡存在就把sd卡根目录下的文件和文件夹显示在listview中,
2.定义两个button,一个用于返回根目录,一个用于返回上一层,
3.对listview位置进行监听,如果是文件则提示打不开,如果是文件夹就进入下个目录,得到下个目录底下的文件和文件夹,刷新listview
代码:
View Code
1 package cn.shaoyangjiang.com; 2 import java.io.File; 3 import java.text.SimpleDateFormat; 4 import java.util.ArrayList; 5 import java.util.Date; 6 import java.util.HashMap; 7 import java.util.List; 8 import java.util.Map; 9 10 import android.app.Activity; 11 import android.os.Bundle; 12 import android.view.View; 13 import android.widget.AdapterView; 14 import android.widget.AdapterView.OnItemClickListener; 15 import android.widget.Button; 16 import android.widget.ListView; 17 import android.widget.SimpleAdapter; 18 import android.widget.TextView; 19 import android.widget.Toast; 20 21 public class WJActivity extends Activity { 22 23 private TextView tvpath; 24 private ListView lvFiles; 25 private Button btnParent; 26 private Button btRoot; 27 28 // 记录当前的父文件夹 29 File currentParent; 30 File root; 31 // 记录当前路径下的所有文件夹的文件数组 32 File[] currentFiles; 33 34 public void onCreate(Bundle savedInstanceState) { 35 super.onCreate(savedInstanceState); 36 setContentView(R.layout.main); 37 38 lvFiles = (ListView) this.findViewById(R.id.files); 39 tvpath = (TextView) this.findViewById(R.id.tvpath); 40 btnParent = (Button) this.findViewById(R.id.btnParent); 41 btRoot = (Button) this.findViewById(R.id.btRoot); 42 43 // 获取系统的SDCard的目录 44 root = new File("/mnt/sdcard/"); 45 // 如果SD卡存在的话 46 if (root.exists()) { 47 48 currentParent = root; 49 currentFiles = root.listFiles(); 50 // 使用当前目录下的全部文件、文件夹来填充ListView 51 inflateListView(currentFiles); 52 53 } 54 55 lvFiles.setOnItemClickListener(new OnItemClickListener() { 56 @Override 57 public void onItemClick(AdapterView adapterView, View view, 58 int position, long id) { 59 // 如果用户单击了文件,直接返回,不做任何处理 60 if (currentFiles[position].isFile()) { 61 // 也可自定义扩展打开这个文件等 62 Toast.makeText(WJActivity.this, 63 "文件打不开的", Toast.LENGTH_LONG).show(); 64 return; 65 } 66 // 获取用户点击的文件夹 下的所有文件 67 File[] tem = currentFiles[position].listFiles(); 68 if (tem == null || tem.length == 0) { 69 70 Toast.makeText(WJActivity.this, 71 "当前路径不可访问或者该路径下没有文件", Toast.LENGTH_LONG).show(); 72 } else { 73 // 获取用户单击的列表项对应的文件夹,设为当前的父文件夹 74 currentParent = currentFiles[position]; 75 // 保存当前的父文件夹内的全部文件和文件夹 76 currentFiles = tem; 77 // 再次更新ListView 78 inflateListView(currentFiles); 79 } 80 81 } 82 }); 83 84 // 获取上一级目录 85 btnParent.setOnClickListener(new View.OnClickListener() { 86 87 @Override 88 public void onClick(View v) { 89 try { 90 91 if (!currentParent.getCanonicalPath().equals("/mnt/sdcard")) { 92 93 // 获取上一级目录 94 currentParent = currentParent.getParentFile(); 95 // 列出当前目录下的所有文件 96 currentFiles = currentParent.listFiles(); 97 // 再次更新ListView 98 inflateListView(currentFiles); 99 } 100 } catch (Exception e) { 101 // TODO: handle exception 102 } 103 104 } 105 }); 106 107 // 回到根目录 108 btRoot.setOnClickListener(new View.OnClickListener() { 109 110 @Override 111 public void onClick(View v) { 112 currentParent = root; 113 currentFiles = root.listFiles(); 114 // 使用当前目录下的全部文件、文件夹来填充ListView 115 inflateListView(currentFiles); 116 } 117 }); 118 119 } 120 121 /** 122 * 根据文件夹填充ListView 123 * 124 * @param files 125 */ 126 private void inflateListView(File[] files) { 127 128 List
布局文件:
View Code
1 26 14 19 25 26 30 31
listview布局
View Code
1 27 12 16 29 3022 28
效果图: