之前集成别人的一个项目,发现了一个挺好用的查找文件的功能,
路径我这边选择的内部存储:
Environment.getExternalStorageDirectory().getAbsolutePath();
我们看效果图:
一个很简单的选择弹窗,我们看一下代码:
放在openFileDialog方法中,在需要的地方调用即可。
// Upload
private GridView mGridView;
private View fileChooserView;
private TextView mTvPath;
private String mSdcardRootPath;
private String mLastFilePath;
private List<UploadFileChooserAdapter.FileInfo> mUploadFileList;
private UploadFileChooserAdapter mUploadAdapter;
private Dialog uploadDialog;
路径 :
mSdcardRootPath = Environment.getExternalStorageDirectory().getAbsolutePath();
//文件选择器相关功能实现
private void openFileDialog() {
initDialog();
uploadDialog = new AlertDialog.Builder(this).create();
Window window = uploadDialog.getWindow();
WindowManager.LayoutParams lp = window.getAttributes();
window.setAttributes(lp);
uploadDialog.show();
uploadDialog.getWindow().setContentView(fileChooserView,
new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, 640));
}
private void initDialog() {
fileChooserView = getLayoutInflater().inflate(
R.layout.filechooser_show, null);
fileChooserView.findViewById(R.id.imgBackFolder).setOnClickListener(
mClickListener);
mTvPath = (TextView) fileChooserView.findViewById(R.id.tvPath);
mGridView = (GridView) fileChooserView.findViewById(R.id.gvFileChooser);
mGridView.setEmptyView(fileChooserView.findViewById(R.id.tvEmptyHint));
mGridView.setOnItemClickListener(mItemClickListener);
setGridViewAdapter(mSdcardRootPath);
}
private View.OnClickListener mClickListener = new View.OnClickListener() {
public void onClick(View v) {
switch (v.getId()) {
case R.id.imgBackFolder:
backProcess();
break;
}
}
};
private AdapterView.OnItemClickListener mItemClickListener = new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?> adapterView, View view,
int position, long id) {
UploadFileChooserAdapter.FileInfo fileInfo = (UploadFileChooserAdapter.FileInfo) (((UploadFileChooserAdapter) adapterView
.getAdapter()).getItem(position));
if (fileInfo.isDirectory()) {
updateFileItems(fileInfo.getFilePath());
} else {
}
}
};
private void setGridViewAdapter(String filePath) {
updateFileItems(filePath);
mUploadAdapter = new UploadFileChooserAdapter(this, mUploadFileList);
mGridView.setAdapter(mUploadAdapter);
}
private void updateFileItems(String filePath) {
mLastFilePath = filePath;
mTvPath.setText(mLastFilePath);
if (mUploadFileList == null)
mUploadFileList = new ArrayList<>();
if (!mUploadFileList.isEmpty())
mUploadFileList.clear();
File[] files = folderScan(filePath);
for (int i = 0; i < files.length; i++) {
if (files[i].isHidden()) // Ignore the hidden file
continue;
String fileAbsolutePath = files[i].getAbsolutePath();
String fileName = files[i].getName();
boolean isDirectory = false;
if (files[i].isDirectory()) {
isDirectory = true;
}
UploadFileChooserAdapter.FileInfo fileInfo = new UploadFileChooserAdapter.FileInfo(fileAbsolutePath, fileName,
isDirectory);
mUploadFileList.add(fileInfo);
}
// When first enter , the object of mAdatper don't initialized
if (mUploadAdapter != null)
mUploadAdapter.notifyDataSetChanged();
}
private File[] folderScan(String path) {
File file = new File(path);
File[] files = file.listFiles();
return files;
}
public void backProcess() {
if (!mLastFilePath.equals(mSdcardRootPath)) {
File thisFile = new File(mLastFilePath);
String parentFilePath = thisFile.getParent();
updateFileItems(parentFilePath);
} else {
setResult(RESULT_CANCELED);
uploadDialog.dismiss();
}
}
如果还需要实现其他更多的功能,可以根据自己实际情况,再添加也是不错的。如果上面有遇到问题,可以评论留言一起交流学习。