Android文件选择器不显示文件
我正在使用在中找到的文件选择器 当我浏览放在设备上的文件时(无论是模拟文件还是Nexus5),它们都不会显示。当我浏览到Android文件选择器不显示文件,android,filechooser,Android,Filechooser,我正在使用在中找到的文件选择器 当我浏览放在设备上的文件时(无论是模拟文件还是Nexus5),它们都不会显示。当我浏览到/sdcard/时,它说没有目录或文件。我知道我在那里推了几个.txt和.xml文件,默认情况下应该有多个目录。我几乎完全正确地使用了这些文件 你知道问题出在哪里吗 import java.io.File; import java.io.FilenameFilter; import java.util.ArrayList; import java.util.Collection
/sdcard/
时,它说没有目录或文件。我知道我在那里推了几个.txt
和.xml
文件,默认情况下应该有多个目录。我几乎完全正确地使用了这些文件
你知道问题出在哪里吗
import java.io.File;
import java.io.FilenameFilter;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import android.app.ListActivity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
public class FilePicker extends ListActivity {
public final static String EXTRA_FILE_PATH = "file_path";
public final static String EXTRA_SHOW_HIDDEN_FILES = "show_hidden_files";
public final static String EXTRA_ACCEPTED_FILE_EXTENSIONS = "accepted_file_extensions";
private final static String DEFAULT_INITIAL_DIRECTORY = "/";
protected File Directory;
protected ArrayList<File> Files;
protected FilePickerListAdapter Adapter;
protected boolean ShowHiddenFiles = false;
protected String[] acceptedFileExtensions;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
LayoutInflater inflator = (LayoutInflater)
getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View emptyView = inflator.inflate(R.layout.empty_view, null);
((ViewGroup) getListView().getParent()).addView(emptyView);
getListView().setEmptyView(emptyView);
// Set initial directory
Directory = new File(DEFAULT_INITIAL_DIRECTORY);
// Initialize the ArrayList
Files = new ArrayList<File>();
// Set the ListAdapter
Adapter = new FilePickerListAdapter(this, Files);
setListAdapter(Adapter);
// Initialize the extensions array to allow any file extensions
acceptedFileExtensions = new String[] {};
// Get intent extras
if(getIntent().hasExtra(EXTRA_FILE_PATH))
Directory = new File(getIntent().getStringExtra(EXTRA_FILE_PATH));
if(getIntent().hasExtra(EXTRA_SHOW_HIDDEN_FILES))
ShowHiddenFiles = getIntent().getBooleanExtra(EXTRA_SHOW_HIDDEN_FILES, false);
if(getIntent().hasExtra(EXTRA_ACCEPTED_FILE_EXTENSIONS)) {
ArrayList<String> collection =
getIntent().getStringArrayListExtra(EXTRA_ACCEPTED_FILE_EXTENSIONS);
acceptedFileExtensions = (String[])
collection.toArray(new String[collection.size()]);
}
}
@Override
protected void onResume() {
refreshFilesList();
super.onResume();
}
protected void refreshFilesList() {
Files.clear();
ExtensionFilenameFilter filter =
new ExtensionFilenameFilter(acceptedFileExtensions);
File[] files = Directory.listFiles(filter);
if(files != null && files.length > 0) {
for(File f : files) {
if(f.isHidden() && !ShowHiddenFiles) {
continue;
}
Files.add(f);
}
Collections.sort(Files, new FileComparator());
}
Adapter.notifyDataSetChanged();
}
@Override
public void onBackPressed() {
if(Directory.getParentFile() != null) {
Directory = Directory.getParentFile();
refreshFilesList();
return;
}
super.onBackPressed();
}
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
File newFile = (File)l.getItemAtPosition(position);
if(newFile.isFile()) {
Intent extra = new Intent();
extra.putExtra(EXTRA_FILE_PATH, newFile.getAbsolutePath());
setResult(RESULT_OK, extra);
finish();
}
else {
Directory = newFile;
refreshFilesList();
}
super.onListItemClick(l, v, position, id);
}
private class FilePickerListAdapter extends ArrayAdapter<File> {
private List<File> mObjects;
public FilePickerListAdapter(Context context, List<File> objects) {
super(context, R.layout.list_item, android.R.id.text1, objects);
mObjects = objects;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View row = null;
if(convertView == null) {
LayoutInflater inflater = (LayoutInflater)
getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
row = inflater.inflate(R.layout.list_item, parent, false);
}
else
row = convertView;
File object = mObjects.get(position);
ImageView imageView = (ImageView)row.findViewById(R.id.file_picker_image);
TextView textView = (TextView)row.findViewById(R.id.file_picker_text);
textView.setSingleLine(true);
textView.setText(object.getName());
/*if(object.isFile())
imageView.setImageResource(R.drawable.file);
else
imageView.setImageResource(R.drawable.folder);*/
return row;
}
}
private class FileComparator implements Comparator<File> {
public int compare(File f1, File f2) {
if(f1 == f2)
return 0;
if(f1.isDirectory() && f2.isFile())
// Show directories above files
return -1;
if(f1.isFile() && f2.isDirectory())
// Show files below directories
return 1;
// Sort the directories alphabetically
return f1.getName().compareToIgnoreCase(f2.getName());
}
}
private class ExtensionFilenameFilter implements FilenameFilter {
private String[] Extensions;
public ExtensionFilenameFilter(String[] extensions) {
super();
Extensions = extensions;
}
public boolean accept(File dir, String filename) {
if(new File(dir, filename).isDirectory()) {
// Accept all directory names
return true;
}
if(Extensions != null && Extensions.length > 0) {
for(int i = 0; i < Extensions.length; i++) {
if(filename.endsWith(Extensions[i])) {
// The filename ends with the extension
return true;
}
}
// The filename did not match any of the extensions
return false;
}
// No extensions has been set. Accept all file extensions.
return true;
}
}
}
导入java.io.File;
导入java.io.FilenameFilter;
导入java.util.ArrayList;
导入java.util.Collections;
导入java.util.Comparator;
导入java.util.List;
导入android.app.ListActivity;
导入android.content.Context;
导入android.content.Intent;
导入android.os.Bundle;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.ViewGroup;
导入android.widget.ArrayAdapter;
导入android.widget.ImageView;
导入android.widget.ListView;
导入android.widget.TextView;
公共类文件选择器扩展ListActivity{
公共最终静态字符串EXTRA\u FILE\u PATH=“FILE\u PATH”;
公共最终静态字符串EXTRA\u SHOW\u HIDDEN\u FILES=“SHOW\u HIDDEN\u FILES”;
公共最终静态字符串EXTRA\u ACCEPTED\u FILE\u EXTENSIONS=“ACCEPTED\u FILE\u EXTENSIONS”;
私有最终静态字符串DEFAULT_INITIAL_DIRECTORY=“/”;
受保护的文件目录;
受保护的ArrayList文件;
受保护的FilePickerListAdapter适配器;
受保护的布尔值ShowHiddenFiles=false;
受保护的字符串[]acceptedFileExtensions;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
LayoutInflater充气机=(LayoutInflater)
getSystemService(上下文布局\充气机\服务);
视图emptyView=充气机。充气(R.layout.empty\u视图,空);
((视图组)getListView().getParent()).addView(emptyView);
getListView().setEmptyView(emptyView);
//设置初始目录
目录=新文件(默认初始目录);
//初始化ArrayList
Files=newarraylist();
//设置ListAdapter
Adapter=newfilePickerListAdapter(此,文件);
setListAdapter(适配器);
//初始化扩展名数组以允许任何文件扩展名
acceptedFileExtensions=新字符串[]{};
//获得额外的
if(getIntent().hasExtra(额外文件路径))
目录=新文件(getIntent().getStringExtra(EXTRA_文件_路径));
if(getIntent().hasExtra(额外显示隐藏文件))
ShowHiddenFiles=getIntent().getBooleanExtra(EXTRA\u SHOW\u HIDDEN\u FILES,false);
if(getIntent().hasExtra(额外的文件扩展名)){
ArrayList集合=
getIntent().getStringArrayListXTRA(额外的文件扩展名);
acceptedFileExtensions=(字符串[])
toArray(新字符串[collection.size()]);
}
}
@凌驾
受保护的void onResume(){
刷新文件列表();
super.onResume();
}
受保护的无效刷新文件列表(){
clear()文件;
ExtensionFileName过滤器=
新的ExtensionFilenameFilter(acceptedFileExtensions);
File[]files=目录.listFiles(过滤器);
如果(files!=null&&files.length>0){
用于(文件f:文件){
if(f.ishiden()&&!ShowHiddenFiles){
继续;
}
添加(f);
}
排序(文件,新的FileComparator());
}
Adapter.notifyDataSetChanged();
}
@凌驾
public void onBackPressed(){
if(Directory.getParentFile()!=null){
Directory=Directory.getParentFile();
刷新文件列表();
返回;
}
super.onBackPressed();
}
@凌驾
受保护的void onListItemClick(列表视图l、视图v、整数位置、长id){
文件newFile=(文件)l.getItemAtPosition(位置);
if(newFile.isFile()){
意向额外=新意向();
extra.putExtra(extra_FILE_PATH,newFile.getAbsolutePath());
设置结果(结果正常,额外);
完成();
}
否则{
Directory=newFile;
刷新文件列表();
}
super.onListItemClick(左、右、位置、id);
}
私有类FilePickerListAdapter扩展了ArrayAdapter{
私有列表对象;
公共文件PickerListAdapter(上下文、列表对象){
super(上下文,R.layout.list_项,android.R.id.text1,对象);
mObjects=对象;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
视图行=空;
if(convertView==null){
LayoutInflater充气机=(LayoutInflater)
getContext().getSystemService(Context.LAYOUT\u充气机\u服务);
行=充气机。充气(R.layout.list\u项,父项,false);
}
其他的
行=转换视图;
File object=mObjects.get(位置);
ImageView ImageView=(ImageView)row.findViewById(R.id.file\u picker\u image);
TextView TextView=(TextView)row.findViewById(R.id.file\u picker\u text);
textView.setSingleLine(真);
textView.setText(object.getName());
/*if(object.isFile())
setImageResource(R.drawable.file);
其他的
setImageResource(R.drawable.folder)*/
返回行;
}
}
私有类FileComparator实现Comparator{
公共整数比较(文件f1、文件f2){
如果(f1==f2)
返回0;
if(f1.isDirectory()&&f2.isFile())
//显示文件上方的目录
返回
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="hks003.chordtransposer" >
<!-- <uses-sdk android:minSdkVersion="14" android:targetSdkVersion="14"/> -->
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<activity
android:name=".CurrentKey"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".NewKey"
android:label="@string/title_activity_new_key"
android:parentActivityName=".CurrentKey" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="hks003.chordtransposer.CurrentKey" />
</activity>
<activity android:name=".FilePicker">
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
</activity>
</application>
</manifest>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="hks003.chordtransposer" >
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".CurrentKey"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".NewKey"
android:label="@string/title_activity_new_key"
android:parentActivityName=".CurrentKey" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="hks003.chordtransposer.CurrentKey" />
</activity>
<activity android:name=".FilePicker">
</activity>
</application>
</manifest>