0

私はプロジェクトに取り組んでおり、カスタム アレイ アダプターを使用して、デバイス上のファイルとディレクトリのファイル リストを取得しようとしています。

以下は、ファイルのリストを取得するために使用しているコードです。

public ArrayList<FileDirectoryDetails> getFileDirectoryListing()
    {
        ArrayList<FileDirectoryDetails> fileAndDirectories = new ArrayList<FileDirectoryDetails>();

        final String state = Environment.getExternalStorageState();
        if (Environment.MEDIA_MOUNTED.equals(state))
        {
            File[] files = Environment.getExternalStorageDirectory().listFiles();
            for (int i = 0; i < files.length; i++)
            {
                String path = files[i].getName();
                FileOrDirectory fileOrDirectory;
                //FileDirectoryDetails fileDirectoryDetails = new FileDirectoryDetails();
                //fileDirectoryDetails.path = files[i].getName();
                if (files[i].isDirectory())
                {
                    fileOrDirectory = FileOrDirectory.Directory;
                    //fileDirectoryDetails.fileOrDirectory = FileOrDirectory.Directory;
                }
                else
                {
                    fileOrDirectory = FileOrDirectory.File;
                    //fileDirectoryDetails.fileOrDirectory = FileOrDirectory.File;
                }
                FileDirectoryDetails fileDirectoryDetails = new FileDirectoryDetails(path, fileOrDirectory);
                fileAndDirectories.add(fileDirectoryDetails);
            }
        }

        return fileAndDirectories;
    }

以下は、リストアダプターを設定するコードです

public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); listView = getListView();

ArrayList<FileDirectoryDetails> filesAndDirectories = getFileDirectoryListing();
fileDirectoryDetailsArrayAdapter = new 
        FileListingArrayAdapter<FileDirectoryDetails>(this, android.R.layout.simple_list_item_1, filesAndDirectories); 

setListAdapter(fileDirectoryDetailsArrayAdapter);

}

以下は、FileListingArrayAdapter のコードです。

public class FileListingArrayAdapter<FileDirectoryDetails> extends ArrayAdapter<FileDirectoryDetails> 
{
    Context context;
    ArrayList<FileDirectoryDetails> fileDirectoryDetails;
    TextView textView = null;

    public FileListingArrayAdapter(Context context, int resource,
            int textViewResourceId, ArrayList<FileDirectoryDetails> fileListings) {

        super(context, resource, textViewResourceId, fileListings);
        this.context = context;
        this.fileDirectoryDetails = fileListings;
    }

    public FileListingArrayAdapter(Context context, int resource, ArrayList<FileDirectoryDetails> fileListings)
    {
        super(context, resource, fileListings);
        this.context = context;
        this.fileDirectoryDetails = fileListings;
    }

    @Override
    public View getView(int pos, View convertView, ViewGroup parent)
    {
        View view = null;
        LayoutInflater vi = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        view = vi.inflate(R.layout.file_explorer, null);
        TextView textView = (TextView)view.findViewById(R.id.listTextView);
        FileDirectoryDetails fileDetails = fileDirectoryDetails.get(pos);
        //FileDirectoryDetails fileDirectoryDetails = new FileDirectoryDetails();
        fileDetails.path;
        return view;
    }

以下は、FileDirectoryDe​​tails のクラス定義です。

public class FileDirectoryDetails
{
    public String path;
    public FileOrDirectory fileOrDirectory;

    public FileDirectoryDetails(String path, FileOrDirectory fileOrDirectory)
    {
        this.path = path;
        this.fileOrDirectory = fileOrDirectory;
    }
}

カスタム配列アダプターでは、次のことを試みています。

FileDirectoryDetails fileDetails = fileDirectoryDetails.get(pos);

次に、FileDirectoryDe​​tails クラス内の変数にアクセスして、パス名と列挙型を抽出して、ファイルかディレクトリかを判断しようとしています。

ただし、FileDirectoryDe​​tails 内の変数は、Eclipse 内のインテリセンスに表示されません。

これら 2 つの変数にアクセスできない理由がわかりません。

ご協力いただきありがとうございます。

4

2 に答える 2

0

xml で ListView を設定してから、

 ListView myListView = (ListView) findViewById(R.id.idOfListView);
 myListView.setAdapter(new FileListingArrayAdapter(this, R.layout.row_view, filesAndDirectories))

R.layout.row_view は、カスタム リスト行ビューを提供するために作成する xml ページになります。カスタム アダプター クラスでは、行ビューを拡張できます。カスタム アダプター クラスを次のように定義します。

FileListingArrayAdapter extends ArrayAdapter<FileDirectoryDetails>

カスタム配列アダプターの使用方法を示す簡単なチュートリアルを次に示します... http://stirfriedcode.blogspot.jp/2013/10/populating-listview-using-sqlite-android.html

于 2013-11-05T16:14:56.973 に答える