編輯:關於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。
感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
Google在Android6.0之後就刪除了HttpClient相關的API,使用HttpUrlConnection代替,在Android開發中,網絡訪問是必不可少的,
本章內容 第1節 AnalogClock和DigitalClock 第2節 CalendarView 第3節 DatePicker和TimerPicker 第4節 Chr
一、前言前一段時間在做視頻開發,由於本人剛接觸視頻開發這塊,所以領導沒有對我提很高的要求,僅僅要求能夠播放本地視頻即可。我想怎麼簡單怎麼做。於是選擇用Android Vi
Tomcat的結構很復雜,但是Tomcat也非常的模塊化,找到了Tomcat最核心的模塊,就抓住了Tomcat的“七寸”。整體結構Tomcat 總