Android 类似于windows打开文件对话框的实现

来源:互联网 发布:手游推荐知乎 编辑:程序博客网 时间:2024/04/30 07:07
源码:
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;@Overridepublic 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(){@Overridepublic 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);elselistItem.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);}@Overridepublic void onBackPressed(){if (isRoot)super.onBackPressed();elseup2Parent();}}


布局文件

<?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>


 

原创粉丝点击