• Android通过LIstView显示文件列表


    绥江一百http://www.sj100.net                                                  欢迎,进入绥江一百感谢点击[我的小网站,请大家多多指教相互共勉]

          在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     <Button
    14         android:id="@+id/But_Up"
    15         android:layout_width="wrap_content"
    16         android:layout_height="wrap_content"
    17         android:text="向上" />
    18 
    19     <ListView
    20         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     <ImageView
    17         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     <TextView
    26         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时必须要提供Context
    18     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 stub
    24         return list.size();
    25     }
    26 
    27     public Object getItem(int arg0) {
    28         // TODO Auto-generated method stub
    29         return null;
    30     }
    31 
    32     public long getItemId(int position) {
    33         // TODO Auto-generated method stub
    34         return position;
    35     }
    36 
    37     public View getView(int position, View arg1, ViewGroup arg2) {
    38         // TODO Auto-generated method stub
    39         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         else
    49              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     @Override
    18     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 stub
    36         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 stub
    45         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,并且一定不要勾选主方法。二是要在resdrawable-hdpi中添加用于显示文件和文件夹的图片。三是在item.xml的设计时需把Change Layout中New Layout Type的值设为LinearLayout,这样就方便我们随意放置ImageView和textView的位置,从而有利于软件的美观。第一次做这个显示SD卡中的文件列表时就失败了,后来就不爱去碰它,不爱去解决这个问题。导致这个问题一直没有解决,后来是迫于考试没法就去重新做,才发现其实没有什么问题,一直做下来都很顺畅。这使我明白了可怕的不是问题,而是没有去解决问题的恒心和懒惰的心理。其实有的问题它其实只是很简单的问题只要轻轻松松的就解决了,而不是什么重大的问题。在日常生活和学习中我们应该简单的看待问题。

  • 相关阅读:
    bestcoder #66
    uva11093 Just Finish it up
    UVA 12627 Erratic Expansion
    uva714 Copying Books
    龟兔赛跑
    神、上帝以及老天爷
    不容易系列之(3)―― LELE的RPG难题
    C. Watto and Mechanism
    Phone List hdu1671
    B. Han Solo and Lazer Gun
  • 原文地址:https://www.cnblogs.com/zengqin/p/3140998.html
Copyright © 2020-2023  润新知