Reputation: 36205
I am working on a project and I am trying to make use of the custom array adapter to get a file listing of files and directories that are on the device.
Below is the code I am using to get the file listing:
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;
}
Below is the code where it sets the list adapter
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);
}
Below is the code for 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;
}
Below is the class definition for the FileDirectoryDetails:
public class FileDirectoryDetails
{
public String path;
public FileOrDirectory fileOrDirectory;
public FileDirectoryDetails(String path, FileOrDirectory fileOrDirectory)
{
this.path = path;
this.fileOrDirectory = fileOrDirectory;
}
}
In the custom array adapter I am trying the following:
FileDirectoryDetails fileDetails = fileDirectoryDetails.get(pos);
and then I am trying to access the variables within the FileDirectoryDetails class to extract the path name and the enum to say whether it is a file or a directory.
However, the variables within the FileDirectoryDetails do not get shown in the intellisense within Eclipse.
I don't understand why those two variables are not accessible.
Thanks for any help you can provide.
Upvotes: 0
Views: 191
Reputation: 116
You could set up a ListView in xml and then
ListView myListView = (ListView) findViewById(R.id.idOfListView);
myListView.setAdapter(new FileListingArrayAdapter(this, R.layout.row_view, filesAndDirectories))
R.layout.row_view would be the xml page you create giving a custom list row view. In your custom adapter class, you can inflate the row view. Define your custom adapter class as...
FileListingArrayAdapter extends ArrayAdapter<FileDirectoryDetails>
Here's a simple tutorial that shows use of a custom array adapter... http://stirfriedcode.blogspot.jp/2013/10/populating-listview-using-sqlite-android.html
Upvotes: 0
Reputation: 2180
Instead of Extending ArrayAdapter , extend BaseAdapter to write your custom Adapter class. It will make this much simpler and it will work.
Upvotes: 1