Android Open Source - NoNonsense-FilePicker Bindable Array Adapter






From Project

Back to project page NoNonsense-FilePicker.

License

The source code is released under:

GNU General Public License

If you think the Android project NoNonsense-FilePicker listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

/*
 * Copyright (c) 2014 Jonas Kalderstam/* w  w  w . j a  va  2  s . c  o m*/
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

package com.nononsenseapps.filepicker;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;

import java.util.List;

public class BindableArrayAdapter<T> extends ArrayAdapter<T> {

    private final LayoutInflater mInflater;
    private final int mResource;
    private ViewBinder<T> viewBinder = null;

    /**
     * Constructor
     *
     * @param context  The current context.
     * @param resource The resource ID for a layout file containing a TextView to use when
     */
    public BindableArrayAdapter(final Context context, final int resource) {
        super(context, resource);
        mResource = resource;
        mInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }

    /**
     * Constructor
     *
     * @param context            The current context.
     * @param resource           The resource ID for a layout file containing a layout to use when
     *                           instantiating views.
     * @param textViewResourceId The id of the TextView within the layout resource to be populated
     */
    public BindableArrayAdapter(final Context context, final int resource, final int textViewResourceId) {
        super(context, resource, textViewResourceId);
        mResource = resource;
        mInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }

    /**
     * Constructor
     *
     * @param context  The current context.
     * @param resource The resource ID for a layout file containing a TextView to use when
     *                 instantiating views.
     * @param objects  The objects to represent in the ListView.
     */
    public BindableArrayAdapter(final Context context, final int resource, final T[] objects) {
        super(context, resource, objects);
        mResource = resource;
        mInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }

    /**
     * Constructor
     *
     * @param context            The current context.
     * @param resource           The resource ID for a layout file containing a layout to use when
     *                           instantiating views.
     * @param textViewResourceId The id of the TextView within the layout resource to be populated
     * @param objects            The objects to represent in the ListView.
     */
    public BindableArrayAdapter(final Context context, final int resource, final int textViewResourceId, final T[] objects) {
        super(context, resource, textViewResourceId, objects);
        mResource = resource;
        mInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }

    /**
     * Constructor
     *
     * @param context  The current context.
     * @param resource The resource ID for a layout file containing a TextView to use when
     *                 instantiating views.
     * @param objects  The objects to represent in the ListView.
     */
    public BindableArrayAdapter(final Context context, final int resource, final List<T> objects) {
        super(context, resource, objects);
        mResource = resource;
        mInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }

    /**
     * Constructor
     *
     * @param context            The current context.
     * @param resource           The resource ID for a layout file containing a layout to use when
     *                           instantiating views.
     * @param textViewResourceId The id of the TextView within the layout resource to be populated
     * @param objects            The objects to represent in the ListView.
     */
    public BindableArrayAdapter(final Context context, final int resource, final int textViewResourceId, final List<T> objects) {
        super(context, resource, textViewResourceId, objects);
        mResource = resource;
        mInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }

    @Override
    public int getItemViewType(int position) {
        if (viewBinder != null) {
            if (viewBinder.isDir(position, getItem(position))) {
                return 1;
            }
        }
        return 0;
    }

    @Override
    public int getViewTypeCount() {
        // Files and dirs, so 2
        return 2;
    }

    /**
     * Set the view binder to use to bind data to the list item views.
     * @param binder
     */
    public void setViewBinder(ViewBinder binder) {
        this.viewBinder = binder;
    }

    /**
     * Handle more complex views than standard implementation.
     *
     * @param position
     * @param convertView
     * @param parent
     * @return
     */
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        if (viewBinder == null) {
            return super.getView(position, convertView, parent);
        }
        else {
            View view;

            if (convertView == null && viewBinder != null) {
                view = viewBinder.inflateView(position, mResource, mInflater,
                        parent);
            }
            else if (convertView == null) {
                view = mInflater.inflate(mResource, parent, false);
            } else {
                view = convertView;
            }

            viewBinder.setViewValue(view, position, getItem(position));
            return view;
        }
    }

    public interface ViewBinder<T> {
        /**
         * Called if convertView is null. If this returns null,
         * the specified resource is used. Use this to return multiple views
         * depending on type.
         * @param position
         * @param resource
         * @param inflater
         * @param parent
         * @return
         */
        public View inflateView(final int position,
                                final int resource,
                                final LayoutInflater inflater,
                                final ViewGroup parent);

        /**
         * Used to determine the view's type. Returning false will use same
         * type for all rows.
         * @param position
         * @param data
         * @return
         */
        public boolean isDir(final int position, final T data);

        /**
         * Fill the content in the row
         * @param view
         * @param position
         * @param data
         */
        public void setViewValue(final View view, final int position, final T
                data);
    }
}




Java Source Code List

com.nononsenseapps.filepicker.AbstractFilePickerActivity.java
com.nononsenseapps.filepicker.AbstractFilePickerFragment.java
com.nononsenseapps.filepicker.BindableArrayAdapter.java
com.nononsenseapps.filepicker.FilePickerActivity.java
com.nononsenseapps.filepicker.FilePickerFragment.java
com.nononsenseapps.filepicker.NewFolderFragment.java
com.nononsenseapps.filepicker.NewItemFragment.java
com.nononsenseapps.filepicker.sample.NoNonsenseFilePicker.java
com.nononsenseapps.filepicker.sample.dropbox.DropboxFilePickerActivity.java
com.nononsenseapps.filepicker.sample.dropbox.DropboxFilePickerFragment.java
com.nononsenseapps.filepicker.sample.dropbox.DropboxSyncHelper.java