Android文件选择器不显示文件

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

我正在使用在中找到的文件选择器

当我浏览放在设备上的文件时(无论是模拟文件还是Nexus5),它们都不会显示。当我浏览到
/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>