Boardy
Boardy

Reputation: 36205

Using custom array adapters

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

Answers (2)

stir-fried
stir-fried

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

ayon
ayon

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

Related Questions