Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發實例 >> Android文件選擇器的實例分享

Android文件選擇器的實例分享

編輯:Android開發實例

       本文給大家講解下Android文件選擇器的使用。實際上就是獲取用戶在SD卡中選擇的文件或文件夾的路徑,這很像C#中的OpenFileDialog控件。

       此實例的實現過程很簡單,這樣可以讓大家快速的熟悉Android文件選擇器,提高開發效率。

       網上曾經見到過一個關於文件選擇器的實例,很多人都看過,本實例是根據它修改而成的,但更容易理解,效率也更高,另外,本實例有自己的特點:

       1、監聽了用戶按下Back鍵的事件,使其返回上一層目錄。

       2、針對不同的文件類型(文件vs文件夾 , 目標文件vs其他文件)做了特殊處理。

       知識點一、 File 類的使用

       文件選擇器的主要功能是:浏覽文件\文件夾、文件類型等;都是通過Java File類來實現的。

       知識點二、調用方法說明   

       使用了startActivityForResult()發起調用以及onActivityResult()方法接收回調後的信息。

       先貼上效果圖如下:

Android文件選擇器的實例分享

       其他的也沒什麼好說了,大家看看代碼注釋吧,很簡單。

       FileChooserActivity.java 實現文件選擇的類 。

Java代碼
  1. public class CopyOfFileChooserActivity extends Activity {  
  2.       
  3.     private String mSdcardRootPath ;  //sdcard 根路徑  
  4.     private String mLastFilePath ;    //當前顯示的路徑  
  5.       
  6.     private ArrayList<FileInfo> mFileLists  ;  
  7.     private FileChooserAdapter mAdatper ;  
  8.       
  9.     //配置適配器  
  10.     private void setGridViewAdapter(String filePath) {  
  11.         updateFileItems(filePath);  
  12.         mAdatper = new FileChooserAdapter(this , mFileLists);  
  13.         mGridView.setAdapter(mAdatper);  
  14.     }  
  15.     //根據路徑更新數據,並且通知Adatper數據改變  
  16.     private void updateFileItems(String filePath) {  
  17.         mLastFilePath = filePath ;  
  18.         mTvPath.setText(mLastFilePath);  
  19.           
  20.         if(mFileLists == null)  
  21.             mFileLists = new ArrayList<FileInfo>() ;  
  22.         if(!mFileLists.isEmpty())  
  23.             mFileLists.clear() ;  
  24.           
  25.         File[] files = folderScan(filePath);  
  26.         if(files == null)   
  27.             return ;  
  28.         for (int i = 0; i < files.length; i++) {  
  29.             if(files[i].isHidden())  // 不顯示隱藏文件  
  30.                 continue ;  
  31.               
  32.             String fileAbsolutePath = files[i].getAbsolutePath() ;  
  33.             String fileName = files[i].getName();  
  34.             boolean isDirectory = false ;  
  35.             if (files[i].isDirectory()){  
  36.                 isDirectory = true ;  
  37.             }  
  38.             FileInfo fileInfo = new FileInfo(fileAbsolutePath , fileName , isDirectory) ;  
  39.             //添加至列表  
  40.             mFileLists.add(fileInfo);  
  41.         }  
  42.         //When first enter , the object of mAdatper don't initialized  
  43.         if(mAdatper != null)  
  44.             mAdatper.notifyDataSetChanged();  //重新刷新  
  45.     }  
  46.     //獲得當前路徑的所有文件  
  47.     private File[] folderScan(String path) {  
  48.         File file = new File(path);  
  49.         File[] files = file.listFiles();  
  50.         return files;  
  51.     }  
  52.     private AdapterView.OnItemClickListener mItemClickListener = new OnItemClickListener() {  
  53.         public void onItemClick(AdapterView<?> adapterView, View view, int position,  
  54.                 long id) {  
  55.             FileInfo fileInfo = (FileInfo)(((FileChooserAdapter)adapterView.getAdapter()).getItem(position));  
  56.             if(fileInfo.isDirectory())   //點擊項為文件夾, 顯示該文件夾下所有文件  
  57.                 updateFileItems(fileInfo.getFilePath()) ;  
  58.             else if(fileInfo.isPPTFile()){  //是ppt文件 , 則將該路徑通知給調用者  
  59.                 Intent intent = new Intent();  
  60.                 intent.putExtra(EXTRA_FILE_CHOOSER, fileInfo.getFilePath());  
  61.                 setResult(RESULT_OK , intent);  
  62.                 finish();  
  63.             }  
  64.             else {   //其他文件.....  
  65.                 toast(getText(R.string.open_file_error_format));  
  66.             }  
  67.         }  
  68.     };  
  69.     public boolean onKeyDown(int keyCode , KeyEvent event){  
  70.         if(event.getAction() == KeyEvent.ACTION_DOWN && event.getKeyCode()  
  71.             == KeyEvent.KEYCODE_BACK){  
  72.             backProcess();     
  73.             return true ;  
  74.         }  
  75.         return super.onKeyDown(keyCode, event);  
  76.     }  
  77.     //返回上一層目錄的操作  
  78.     public void backProcess(){  
  79.         //判斷當前路徑是不是sdcard路徑 , 如果不是,則返回到上一層。  
  80.         if (!mLastFilePath.equals(mSdcardRootPath)) {    
  81.             File thisFile = new File(mLastFilePath);  
  82.             String parentFilePath = thisFile.getParent();  
  83.             updateFileItems(parentFilePath);  
  84.         }   
  85.         else {   //是sdcard路徑 ,直接結束  
  86.             setResult(RESULT_CANCELED);  
  87.             finish();  
  88.         }  
  89.     }  
  90. }  

       此實例的界面稍顯簡陋,不過大家可以在此基礎上完善,添加其他功能。本實例代碼下載地址:http://download.csdn.net/detail/qinjuning/4825392。

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved