版权声明:转载请注明出处:https://blog.csdn.net/zwjemperor https://blog.csdn.net/zwjemperor/article/details/7752151
源码:
public class FileExplorerActivity extends ListActivity
{
private final static String FILE_TYPE = "filetype";
private final static String FILE_NAME = "filename";
private ListView listView;
private File currentParent;
private File[] currentFiles;
private List<Map<String, Object>> listItems = new ArrayList<Map<String, Object>>();
private Stack<File> dirStack = new Stack<File>();
private boolean isRoot = true;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
listView = getListView();
listView.setBackgroundColor(Color.WHITE);
listView.setCacheColorHint(Color.WHITE);
setContentView(listView);
listView.setOnItemClickListener(itemClickListener);
init();
}
private void init()
{
File root = Environment.getExternalStorageDirectory();
if (!root.exists())
return;
currentParent = root;
currentFiles = root.listFiles();
sortFiles(currentFiles);
dirStack.push(currentParent);
inflateListView(currentFiles);
isRoot = true;
}
private void sortFiles(File[] files)
{
Arrays.sort(files, new Comparator<File>()
{
public int compare(File paramFile1, File paramFile2)
{
return (int) (paramFile2.lastModified() - paramFile1.lastModified());
}
});
}
private OnItemClickListener itemClickListener = new OnItemClickListener()
{
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id)
{
if (position == 0)
{
up2Parent();
return;
}
int pos = position;
if (isRoot)
isRoot = false;
else
--pos;
if (currentFiles[pos].isFile())
return;
File[] tmp = currentFiles[pos].listFiles();
sortFiles(tmp);
currentParent = currentFiles[pos];
currentFiles = tmp;
dirStack.push(currentParent);
inflateListView(currentFiles);
}
};
private void up2Parent()
{
if (!dirStack.isEmpty() && !isRoot)
{
dirStack.pop();
if (dirStack.size() == 1)
isRoot = true;
if (!dirStack.isEmpty())
{
currentParent = dirStack.peek();
currentFiles = currentParent.listFiles();
inflateListView(currentFiles);
}
}
}
private void inflateListView(File[] files)
{
if (files == null)
return;
listItems.clear();
Map<String, Object> listItem;
if (!isRoot)
{
listItem = new HashMap<String, Object>();
listItem.put(FILE_TYPE, R.drawable.file_up);
listItem.put(FILE_NAME, "..");
listItems.add(listItem);
}
for (int i = 0; i < files.length; i++)
{
listItem = new HashMap<String, Object>();
if (files[i].isDirectory())
listItem.put(FILE_TYPE, R.drawable.folder);
else
listItem.put(FILE_TYPE, R.drawable.file);
listItem.put(FILE_NAME, files[i].getName());
listItems.add(listItem);
}
SimpleAdapter simpleAdapter = new SimpleAdapter(this, listItems, R.layout.fileselectoritem, new String[] { FILE_TYPE, FILE_NAME }, new int[] { R.id.txtTypeIcon, R.id.txtFileName });
listView.setAdapter(simpleAdapter);
}
@Override
public void onBackPressed()
{
if (isRoot)
super.onBackPressed();
else
up2Parent();
}
}
布局文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="horizontal" >
<ImageView
android:id="@+id/txtTypeIcon"
android:layout_width="27.0dip"
android:layout_height="30.0dip"
android:layout_margin="5.0dip"/>
<TextView
android:id="@+id/txtFileName"
android:layout_width="0.0dip"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_weight="1.0"
android:textColor="@android:color/black"/>
</LinearLayout>