0

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.

2 Answers 2

1

Instead of Extending ArrayAdapter , extend BaseAdapter to write your custom Adapter class. It will make this much simpler and it will work.

Sign up to request clarification or add additional context in comments.

Comments

0

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

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.