Android通过LIstView显示文件列表

来源:互联网 发布:linux finger不存在 编辑:程序博客网 时间:2024/06/08 12:27

网络112 曾琴

      在Android中通过ListView显示SD卡中的文件列表一共有两种方法,一是:通过继承ListActivity显示;二是:利用BaseAdapter显示。BaseAdapter是一个公共基类适配器,用于对ListView和Spinner等 一些控件提供显示数据。下面是利用BaseAdapter类来实现通过LIstView显示SD卡的步骤:

1.main.xml界面设计,如下图

 1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 3     android:layout_width="fill_parent" 4     android:layout_height="fill_parent" 5     android:orientation="vertical" > 6  7     <TextView 8         android:id="@+id/Txt_Path" 9         android:layout_width="fill_parent"10         android:layout_height="wrap_content"11         android:text="@string/hello" />12 13     <Button14         android:id="@+id/But_Up"15         android:layout_width="wrap_content"16         android:layout_height="wrap_content"17         android:text="向上" />18 19     <ListView20         android:id="@+id/List_View"21         android:layout_width="match_parent"22         android:layout_height="wrap_content" >23 24     </ListView>25 26 </LinearLayout>
main.xml

 2.item.xml界面设计,如下图

 1 <?xml version="1.0" encoding="utf-8"?> 2 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 3     android:id="@+id/RelativeLayout1" 4     android:layout_width="match_parent" 5     android:layout_height="match_parent" 6     android:orientation="vertical" > 7  8     <TextView 9         android:id="@+id/Txt_Size"10         android:layout_width="wrap_content"11         android:layout_height="wrap_content"12         android:layout_alignParentRight="true"13         android:layout_alignParentTop="true"14         android:text="TextView" />15 16     <ImageView17         android:id="@+id/image_ico"18         android:layout_width="wrap_content"19         android:layout_height="wrap_content"20         android:layout_alignParentLeft="true"21         android:layout_below="@+id/Txt_Size"22         android:layout_marginLeft="18dp"23         android:src="@drawable/folder" />24 25     <TextView26         android:id="@+id/Txt_Name"27         android:layout_width="wrap_content"28         android:layout_height="wrap_content"29         android:layout_alignBottom="@+id/image_ico"30         android:layout_alignParentRight="true"31         android:text="TextView" />32 33 </RelativeLayout>
item.xml

效果图main.xml

效果图item.xml

 3.File_Adter类的实现

 1 package com.cqvie; 2  3 import java.io.File; 4 import java.util.LinkedList; 5 import java.util.List; 6  7 import android.app.Activity; 8 import android.graphics.Bitmap; 9 import android.graphics.BitmapFactory;10 import android.view.View;11 import android.view.ViewGroup;12 import android.widget.BaseAdapter;13 import android.widget.ImageView;14 import android.widget.TextView;15 16 public class File_Adter extends BaseAdapter {17     public Activity activity;  //创建View时必须要提供Context18     public List<File> list=new LinkedList<File>();  //数据源(文件列表)19     public String currPath;//当前路径20     private Bitmap bmp_folder,bmp_file;21     22     public int getCount() {23         // TODO Auto-generated method stub24         return list.size();25     }26 27     public Object getItem(int arg0) {28         // TODO Auto-generated method stub29         return null;30     }31 32     public long getItemId(int position) {33         // TODO Auto-generated method stub34         return position;35     }36 37     public View getView(int position, View arg1, ViewGroup arg2) {38         // TODO Auto-generated method stub39         View v=View.inflate(activity,R.layout.item,null);40         TextView Txt_Name=(TextView) v.findViewById(R.id.Txt_Name);41         TextView Txt_Size=(TextView) v.findViewById(R.id.Txt_Size);42         ImageView img=(ImageView) v.findViewById(R.id.image_ico);43         File f=list.get(position);44         Txt_Name.setText(f.getName());45         Txt_Size.setText(getFilesSize(f));46         if(f.isDirectory())47              img.setImageBitmap(bmp_folder);48         else49              img.setImageBitmap(bmp_file);50              return v;51     }52     public void scanFiles(String path)53     {54         list.clear();55         File dir=new File(path);56         File[] subFiles=dir.listFiles();57         if(subFiles!=null)58            for(File f:subFiles)59                    list.add(f);60         this.notifyDataSetChanged();61         currPath=path;62     }63     public File_Adter(Activity activity)64     {65         this.activity=activity;66         bmp_folder=BitmapFactory.decodeResource(activity.getResources(),R.drawable.folder);//文件夹,decodeResource图片解码,source资源,解码为Bitmap类型;67         bmp_file=BitmapFactory.decodeResource(activity.getResources(),R.drawable.file);//文件68     }69     public static String getFilesSize(File f)70     {71         int sub_index=0;72         String show="";73         if(f.isFile())74         {75             long length=f.length();76         if(length>=1073741824)77         {78             sub_index=String.valueOf((float)length/1073741824).indexOf(".");79             show=((float)length/1073741824+"000").substring(0,sub_index+3)+"GB";80         }81         else if(length>=1048576)82         {83             sub_index=(String.valueOf((float)length/1048576)).indexOf(".");84             show=((float)length/1048576+"000").substring(0,sub_index+3)+"GB";85         }86         else if(length>=1024)87         {88             sub_index=(String.valueOf((float)length/1024)).indexOf(".");89             show=((float)length/1024+"000").substring(0,sub_index+3)+"GB";90         }91         else if(length<1024)92             show=String.valueOf(length)+"B";93         }94             return show;95     }96 }
File_Adter.java

 4.File_listActivity的实现

 1 package com.cqvie; 2  3 import java.io.File; 4  5 import android.app.Activity; 6 import android.os.Bundle; 7 import android.view.View; 8 import android.view.View.OnClickListener; 9 import android.widget.AdapterView;10 import android.widget.AdapterView.OnItemClickListener;11 import android.widget.Button;12 import android.widget.ListView;13 import android.widget.TextView;14 15 public class File_listActivity extends Activity implements OnItemClickListener, OnClickListener {16     /** Called when the activity is first created. */17     @Override18     public void onCreate(Bundle savedInstanceState) {19         super.onCreate(savedInstanceState);20         setContentView(R.layout.main);21         22         List_View=(ListView) findViewById(R.id.List_View);23         But_Up=(Button) findViewById(R.id.But_Up);24         Txt_Path=(TextView) findViewById(R.id.Txt_Path);25         File_Adter Adter=new File_Adter(this);26         List_View.setAdapter(Adter);27         List_View.setOnItemClickListener(this);28         Adter.scanFiles("/");29         But_Up.setOnClickListener(this);30     }31     ListView List_View;32     TextView Txt_Path;33     Button But_Up;34     public void onClick(View v) {35         // TODO Auto-generated method stub36         File_Adter ad=(File_Adter) List_View.getAdapter();37         if(ad.currPath.equals("/")) return;38         File f=new File(ad.currPath);39         Txt_Path.setText(f.getParent());40         ad.scanFiles(f.getParent());41         42     }43     public void onItemClick(AdapterView<?> parent, View v, int positiong, long id) {44         // TODO Auto-generated method stub45         File_Adter da=(File_Adter) List_View.getAdapter();46         File f=da.list.get(positiong);47         if(f.isDirectory())48         {49             Txt_Path.setText(f.getPath());50             da.scanFiles(f.getPath());51         }52     }53 }
File_listActivity.java

 效果图展示 

总结

     在做这个File_Adter的时候,需要注意的有三点,一是在新建文件列表类的时候要继承BaseAdapter,并且一定不要勾选主方法。二是要在res\drawable-hdpi中添加用于显示文件和文件夹的图片。三是在item.xml的设计时需把Change Layout中New Layout Type的值设为LinearLayout,这样就方便我们随意放置ImageView和textView的位置,从而有利于软件的美观。第一次做这个显示SD卡中的文件列表时就失败了,后来就不爱去碰它,不爱去解决这个问题。导致这个问题一直没有解决,后来是迫于考试没法就去重新做,才发现其实没有什么问题,一直做下来都很顺畅。这使我明白了可怕的不是问题,而是没有去解决问题的恒心和懒惰的心理。其实有的问题它其实只是很简单的问题只要轻轻松松的就解决了,而不是什么重大的问题。在日常生活和学习中我们应该简单的看待问题。


<script type="text/javascript"><!--google_ad_client = "ca-pub-1944176156128447";/* cnblogs 首页横幅 */google_ad_slot = "5419468456";google_ad_width = 728;google_ad_height = 90;//--></script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>