码迷,mamicode.com
首页 > 其他好文 > 详细

简单文件浏览器--实现简易文件选取返回路径功能

时间:2015-02-12 22:41:40      阅读:235      评论:0      收藏:0      [点我收藏+]

标签:

因为今天学习Andorid Sample一个示例的时候需要使用一个选取图片的功能,示例中给的Intent没有办法用,因此,自己搜集资料来实现这个简单的文件浏览器,主要这两个文件就贴在下面了:

首先是模型层,定义显示的文件实体(保存文件对应的Icon和其简易名称与绝对路径)

 1 public class DirEntry {
 2     private int icon;
 3     private String dirName;
 4     private String path;
 5 
 6     public String getPath() {
 7         return path;
 8     }
 9 
10     public void setPath(String path) {
11         this.path = path;
12     }
13 
14     public DirEntry(int icon, String path) {
15         this.icon = icon;
16         this.path=path;
17         this.dirName=new File(path).getName();
18     }
19 
20     public int getIcon() {
21         return icon;
22     }
23 
24     public void setIcon(int icon) {
25         this.icon = icon;
26     }
27 
28     public String getDirName() {
29         return dirName;
30     }
31 
32     public void setDirName(String dirName) {
33         this.dirName = dirName;
34     }
35 }

 

然后是主要的列表视图实现,注意没有支持后退键,而且使用的是Adapter的观察者方法,因此进入下级目录的时候并非从开头显示(当然这与Android的ListView的实现有关)

  1 public class MainActivity extends Activity {
  2 
  3     ArrayList<DirEntry> mDirEntries =new ArrayList<DirEntry>();
  4 
  5     @Override
  6     protected void onCreate(Bundle savedInstanceState) {
  7         super.onCreate(savedInstanceState);
  8         requestWindowFeature(Window.FEATURE_NO_TITLE);
  9         setContentView(R.layout.activity_main);
 10 
 11         init_list(getString(R.string.root_dir));
 12 
 13         final FileAdapter adapter=new FileAdapter(mDirEntries);
 14         final ListView listView=(ListView)findViewById(R.id.list);
 15 
 16         listView.setAdapter(adapter);
 17         listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
 18             @Override
 19             public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
 20 
 21                 DirEntry dirEntry =(DirEntry)listView.getAdapter().getItem(position);//获取点击的事件
 22 
 23                 if(!(new File(dirEntry.getPath()).isDirectory())){//当并非目录的时候返回文件名的绝对路径
 24                     System.out.println(dirEntry.getPath());
 25                     return;
 26                 }
 27 
 28                 mDirEntries.clear();
 29                 if(dirEntry.getDirName().equals(getString(R.string.last_dir))){//当获取的目录名称为上级目录的时候
 30                     File last=new File(dirEntry.getPath());
 31                     init_list(last.getParent());
 32                 }else {
 33                     init_list(dirEntry.getPath());
 34                 }
 35                 adapter.notifyDataSetChanged();
 36             }
 37         });
 38     }
 39 
 40     public void init_list(String arg){
 41         File[] root=new File(arg).listFiles();
 42         DirEntry dirEntry;
 43         if(!arg.equals(getString(R.string.root_dir))){
 44             //当目录并非根目录的时候,将第一个节点定义为上级目录,并将上级目录名定义为其绝对路径名,将显示的名称定义为上级目录
 45             dirEntry =new DirEntry(R.drawable.dir_last,arg);
 46             dirEntry.setDirName(getString(R.string.last_dir));
 47             mDirEntries.add(dirEntry);
 48         }
 49 
 50         if(root==null){
 51             return;
 52         }
 53 
 54         for(File dir1:root){
 55             if(dir1.isDirectory()){
 56                 dirEntry =new DirEntry(R.drawable.dir_blue,dir1.getAbsolutePath());
 57             }else {
 58                 dirEntry =new DirEntry(R.drawable.dir_file,dir1.getAbsolutePath());
 59             }
 60             mDirEntries.add(dirEntry);
 61         }
 62     }
 63 
 64     public class FileAdapter extends BaseAdapter{
 65 
 66 
 67         private ArrayList<DirEntry> mDirEntries =new ArrayList<DirEntry>();
 68         private LayoutInflater mLayoutInflater;
 69 
 70         public FileAdapter(ArrayList<DirEntry> dirEntries) {
 71             mDirEntries = dirEntries;
 72             mLayoutInflater=getLayoutInflater();
 73         }
 74 
 75         @Override
 76         public int getCount() {
 77             return mDirEntries.size();
 78         }
 79 
 80         @Override
 81         public DirEntry getItem(int position) {
 82             return mDirEntries.get(position);
 83         }
 84 
 85         @Override
 86         public long getItemId(int position) {
 87             return position;
 88         }
 89 
 90         @Override
 91         public View getView(int position, View convertView, ViewGroup parent) {
 92             if(convertView==null)
 93                 convertView=mLayoutInflater.inflate(R.layout.list_item,parent,false);
 94 
 95             DirEntry dirEntry =getItem(position);
 96 
 97             ImageView icon=(ImageView)convertView.findViewById(R.id.icon);
 98             TextView name=(TextView)convertView.findViewById(R.id.name);
 99 
100             icon.setImageResource(dirEntry.getIcon());
101             name.setText(dirEntry.getDirName());
102 
103             return convertView;
104         }
105     }
106 }

 

 

以上,这样,把上述代码重新写进一个程序中再加以控制就可以实现一个简易返回文件绝对路径的功能,(我觉得可以把它集成到一个Dialog视图中,集成到DialogFragemnt中实现这个简答功能即可)。

实现后的界面:

技术分享

以上。

简单文件浏览器--实现简易文件选取返回路径功能

标签:

原文地址:http://www.cnblogs.com/lhyz/p/4288983.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!