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()方法接收回調後的信息。

       先貼上效果圖如下:

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

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

Java代碼

public class CopyOfFileChooserActivity extends Activity { 
   
  private String mSdcardRootPath ; //sdcard 根路徑 
  private String mLastFilePath ;  //當前顯示的路徑 
   
  private ArrayList<FileInfo> mFileLists ; 
  private FileChooserAdapter mAdatper ; 
   
  //配置適配器 
  private void setGridViewAdapter(String filePath) { 
    updateFileItems(filePath); 
    mAdatper = new FileChooserAdapter(this , mFileLists); 
    mGridView.setAdapter(mAdatper); 
  } 
  //根據路徑更新數據,並且通知Adatper數據改變 
  private void updateFileItems(String filePath) { 
    mLastFilePath = filePath ; 
    mTvPath.setText(mLastFilePath); 
     
    if(mFileLists == null) 
      mFileLists = new ArrayList<FileInfo>() ; 
    if(!mFileLists.isEmpty()) 
      mFileLists.clear() ; 
     
    File[] files = folderScan(filePath); 
    if(files == null)  
      return ; 
    for (int i = 0; i < files.length; i++) { 
      if(files[i].isHidden()) // 不顯示隱藏文件 
        continue ; 
       
      String fileAbsolutePath = files[i].getAbsolutePath() ; 
      String fileName = files[i].getName(); 
      boolean isDirectory = false ; 
      if (files[i].isDirectory()){ 
        isDirectory = true ; 
      } 
      FileInfo fileInfo = new FileInfo(fileAbsolutePath , fileName , isDirectory) ; 
      //添加至列表 
      mFileLists.add(fileInfo); 
    } 
    //When first enter , the object of mAdatper don't initialized 
    if(mAdatper != null) 
      mAdatper.notifyDataSetChanged(); //重新刷新 
  } 
  //獲得當前路徑的所有文件 
  private File[] folderScan(String path) { 
    File file = new File(path); 
    File[] files = file.listFiles(); 
    return files; 
  } 
  private AdapterView.OnItemClickListener mItemClickListener = new OnItemClickListener() { 
    public void onItemClick(AdapterView<?> adapterView, View view, int position, 
        long id) { 
      FileInfo fileInfo = (FileInfo)(((FileChooserAdapter)adapterView.getAdapter()).getItem(position)); 
      if(fileInfo.isDirectory())  //點擊項為文件夾, 顯示該文件夾下所有文件 
        updateFileItems(fileInfo.getFilePath()) ; 
      else if(fileInfo.isPPTFile()){ //是ppt文件 , 則將該路徑通知給調用者 
        Intent intent = new Intent(); 
        intent.putExtra(EXTRA_FILE_CHOOSER, fileInfo.getFilePath()); 
        setResult(RESULT_OK , intent); 
        finish(); 
      } 
      else {  //其他文件..... 
        toast(getText(R.string.open_file_error_format)); 
      } 
    } 
  }; 
  public boolean onKeyDown(int keyCode , KeyEvent event){ 
    if(event.getAction() == KeyEvent.ACTION_DOWN && event.getKeyCode() 
      == KeyEvent.KEYCODE_BACK){ 
      backProcess();   
      return true ; 
    } 
    return super.onKeyDown(keyCode, event); 
  } 
  //返回上一層目錄的操作 
  public void backProcess(){ 
    //判斷當前路徑是不是sdcard路徑 , 如果不是,則返回到上一層。 
    if (!mLastFilePath.equals(mSdcardRootPath)) {  
      File thisFile = new File(mLastFilePath); 
      String parentFilePath = thisFile.getParent(); 
      updateFileItems(parentFilePath); 
    }  
    else {  //是sdcard路徑 ,直接結束 
      setResult(RESULT_CANCELED); 
      finish(); 
    } 
  } 
} 

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

http://download.csdn.net/detail/qinjuning/4825392。

        感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

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