如何通过Sergei Skogun的OpenFileDialog.java获取Android选中文件完整路径?
嘿,我之前也折腾过这个OpenFileDialog类,太懂你找不到选中文件完整路径的头疼了!其实这个类本身是有办法拿到路径的,只是可能你没注意到它的回调机制或者内部方法,下面给你几个靠谱的解决思路:
方法1:用内置的回调接口(最推荐)
大多数版本的这个类都会提供一个OnFileSelectedListener回调接口,你在创建对话框的时候绑定这个监听器,用户点击确认按钮时,就会直接把选中文件的完整路径传给你。代码示例大概是这样的:
OpenFileDialog fileDialog = new OpenFileDialog(this); fileDialog.setOnFileSelectedListener(new OpenFileDialog.OnFileSelectedListener() { @Override public void onFileSelected(String fullFilePath) { // 这里的fullFilePath就是你要的完整路径! Log.d("SelectedFile", fullFilePath); // 直接拿去用就行,比如显示到TextView yourTitleTextView.setText(fullFilePath); } }); fileDialog.show();
如果你的版本里没这个接口,去看看类里有没有类似setOnOkClickListener的方法,在确认按钮的点击回调里处理路径。
方法2:直接调用类的getter方法(如果有的话)
有些版本的这个类会把选中文件的路径存在内部变量里,还提供了公共的getter方法。比如如果类里有getSelectedFilePath()这样的方法,你在确认按钮触发后直接调用就行:
// 假设你在确认按钮的点击事件里 String fullPath = fileDialog.getSelectedFilePath();
要是没有getter,但那个变量是public的(比如selectedFilePath),也可以直接拿,但这种方式不太优雅,尽量用getter。
方法3:自己修改源码(迫不得已时)
如果上面两种都不行,那你直接改OpenFileDialog的源码就好,其实很简单:
- 先在类里加个私有变量存路径:
private String mSelectedFullPath; - 在用户选中列表里的文件时(比如
onListItemClick方法里),把完整路径赋值给它:mSelectedFullPath = new File(currentPath, fileName).getAbsolutePath(); - 再加个公共的getter方法:
public String getSelectedFullPath() { return mSelectedFullPath; }
这样你在对话框关闭后,调用fileDialog.getSelectedFullPath()就能拿到路径了。
另外提一句,你之前试的currentPath只是当前所在的目录路径,不是选中的文件路径,要拿到完整路径得把currentPath和选中的文件名拼起来:new File(currentPath, selectedFileName).getAbsolutePath(),这也算是个临时应急的办法,只要你能拿到选中的文件名。
内容的提问来源于stack exchange,提问作者G.Danil

