私はプロジェクトに取り組んでおり、カスタム アレイ アダプターを使用して、デバイス上のファイルとディレクトリのファイル リストを取得しようとしています。
以下は、ファイルのリストを取得するために使用しているコードです。
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;
}
以下は、FileDirectoryDetails のクラス定義です。
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);
次に、FileDirectoryDetails クラス内の変数にアクセスして、パス名と列挙型を抽出して、ファイルかディレクトリかを判断しようとしています。
ただし、FileDirectoryDetails 内の変数は、Eclipse 内のインテリセンスに表示されません。
これら 2 つの変数にアクセスできない理由がわかりません。
ご協力いただきありがとうございます。