简单文件管理器开发

网络112 柳内恒

      用Android手机的朋友都知道有些软件对于用户来说是必不可少的,因为少了它们的存在我们用户用起来就很不方便。比如说文件管理器就是一个比较典型的一个软件,因为我们少了它就不方便管理我们手机中的一些文件资料,对于用户来说这必然是一大遗憾。今天我们就来相互讨论一下简单文件管理器的开发。

一、界面设计需要

1、  在主界面(main.xml)加入一个TextView、Button、ListView控件,它们分别用于表示当前路径、返回上级路径、显示当前路径下的所有文件与文件夹。效果图如下所示:

2、  新建一个(item.xml)文件,加入一个ImageView和两个TextView控件,它们分别用于表示当前文件是否为文件夹、其中一个TextView用于显示文件名称,另外一个用于显示该文件大小。由于时间关系这里我们就没有做显示文件大小功能。效果图如下:

3、  整个程序运行时的效果图如下所显:

二、程序设计

1、  我们以LiuneihengActivity.java为主程序入口,首先我们将该界面的一些控件加以定义及注册。代码如下:

 1  public void onCreate(Bundle savedInstanceState) {
 2         super.onCreate(savedInstanceState);
 3         setContentView(R.layout.main);
 4         t1=(TextView) findViewById(R.id.t1);//注册TextView控件
 5         lv=(ListView) findViewById(R.id.listView1);//注册ListView控件
 6         btnUp=(Button) findViewById(R.id.btnUp);//注册按钮控件
 7         FileListAdapter da=new FileListAdapter(this);
 8         lv.setAdapter(da);
 9         lv.setOnItemClickListener(this);//为ListView添加侦听器
10         da.scanFiles("/");
11         btnUp.setOnClickListener(this);//为按钮添加侦听器
12     }
13     ListView lv;//定义ListView控件
14     TextView t1;//定义TextView控件
15     Button btnUp;//定义按钮控件
16 }

2、  编写“向上”按钮的点击事件,使用程序返回上一级目录。代码如下:

1 public void onClick(View arg0) {
2         //按钮点击事件
3         FileListAdapter da=(FileListAdapter) lv.getAdapter();
4         if(da.currPath.equals("/")) return;
5         File f=new File(da.currPath);
6         t1.setText(f.getParent());//显示返回上一路径
7         da.scanFiles(f.getParent());
8     }

3、编写ListView控件的点击事件,当用户点击一个文件夹的时候就进入此文件夹的目录下。代码如下:

 1 public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) {
 2         // TODO Auto-generated method stub
 3         FileListAdapter da=(FileListAdapter) lv.getAdapter();
 4         File f=da.list.get(position);
 5         if(f.isDirectory())
 6         {
 7             t1.setText(f.getPath());//显示当前路径
 8             da.scanFiles(f.getPath());
 9         }
10     }

4、  新一个FileListAdapter.java文件,在新建的时候一定要继承“BaseAdapter”包。新建完成后将会自动生成一段代码,其修改后如下。

 1 public int getCount() {
 2         // TODO Auto-generated method stub
 3         return list.size();//获取文件数
 4     }
 5 
 6     @Override
 7     public Object getItem(int arg0) {
 8         // TODO Auto-generated method stub
 9         return null;
10     }
11 
12     @Override
13     public long getItemId(int position) {
14         // TODO Auto-generated method stub
15         return position;
16     }
17 
18     @Override
19     public View getView(int position, View arg1, ViewGroup arg2) {
20         // TODO Auto-generated method stub
21         View v=View.inflate(activity, R.layout.item, null);
22         TextView txtName=(TextView) v.findViewById(R.id.txtName);//将获取到的名字转换成TextView显示
23         ImageView imgIcon=(ImageView) v.findViewById(R.id.imgIcon);//将获取到的文件类型转换成ImageView显示
24         File f=list.get(position);//获取文件数
25         txtName.setText(f.getName());//显示文件名
26         if(f.isDirectory())
27             imgIcon.setImageBitmap(bmp_folder);//ImageView将显示文件夹图标
28         else
29             imgIcon.setImageBitmap(bmp_file);//ImageView将显示文件图标
30         return v;
31     }

5、  定义各类型变量及编写FileListAdapter和scanFiles方法。

 1 public int getCount() {
 2         // TODO Auto-generated method stub
 3         return list.size();//获取文件数
 4     }
 5 
 6     @Override
 7     public Object getItem(int arg0) {
 8         // TODO Auto-generated method stub
 9         return null;
10     }
11 
12     @Override
13     public long getItemId(int position) {
14         // TODO Auto-generated method stub
15         return position;
16     }

6、  编写getView方法,用于实现当前路径下的所有文件及文件夹的图标、文件名称、文件大小等信息。代码如下:

 1     public View getView(int position, View arg1, ViewGroup arg2) {
 2         // TODO Auto-generated method stub
 3         View v=View.inflate(activity, R.layout.item, null);
 4         TextView txtName=(TextView) v.findViewById(R.id.txtName);//将获取到的名字转换成TextView显示
 5         ImageView imgIcon=(ImageView) v.findViewById(R.id.imgIcon);//将获取到的文件类型转换成ImageView显示
 6         File f=list.get(position);//获取文件数
 7         txtName.setText(f.getName());//显示文件名
 8         if(f.isDirectory())
 9             imgIcon.setImageBitmap(bmp_folder);//ImageView将显示文件夹图标
10         else
11             imgIcon.setImageBitmap(bmp_file);//ImageView将显示文件图标
12         return v;
13     }

三、感悟

      这次的简单文件管理器虽然简单,但是也花了我不少的时间。其中只要注意其中几个小细节就应该没什么问题。就像我在做的过程就遇到了,能正确访问到一个文件里的所有内容,但当点击“向上”按钮时对没有任何反应。开始以为是系统没有侦听到按钮控件,后来经过自己的测试以后发现不是这个原因。经过老师的指点发现是我自己把getParent()方法写错了,导致管理器一直停留在当前路径,以致于无法成功返回上一级目录。

转载于:https://www.cnblogs.com/liuneiheng/archive/2013/06/08/3125536.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值