All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.octo.android.robospice.spicelist.SpiceListView Maven / Gradle / Ivy

package com.octo.android.robospice.spicelist;

import com.octo.android.robospice.spicelist.simple.SpiceArrayAdapter;

import android.content.Context;
import android.util.AttributeSet;
import android.widget.AbsListView;
import android.widget.ListAdapter;
import android.widget.ListView;

/**
 * This {@link ListView} is optimized to display some content that contains image loaded from the
 * network via RoboSpice. It uses a {@link SpiceArrayAdapter} to hold data and create/update views.
 * It can be instanciated programmatically or via XML. Basically, it will load images only when
 * scrolling is stopped.
 * @author sni
 */
public class SpiceListView extends ListView {

    // ----------------------------
    // --- CONSTRUCTORS
    // ----------------------------

    public SpiceListView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        initialize();
    }

    public SpiceListView(Context context, AttributeSet attrs) {
        super(context, attrs);
        initialize();
    }

    public SpiceListView(Context context) {
        super(context);
        initialize();
    }

    // ----------------------------
    // --- PUBLIC API
    // ----------------------------

    @Deprecated
    @Override
    public void setOnScrollListener(OnScrollListener l) {
        throw new RuntimeException("OnScrollListener is already used internally by a SpliceListView.");
    }

    @Override
    public void setAdapter(ListAdapter adapter) {
        if (!(adapter instanceof BaseSpiceArrayAdapter)) {
            throw new IllegalArgumentException("SpiceLists only support SpiceArrayAdapters.");
        }
        super.setAdapter(adapter);

    }

    @Override
    public BaseSpiceArrayAdapter getAdapter() {
        return (BaseSpiceArrayAdapter) super.getAdapter();
    }

    // ----------------------------
    // --- PRIVATE API
    // ----------------------------
    private void initialize() {
        super.setOnScrollListener(new SpiceListScrollListener());
    }

    // ----------------------------
    // --- INNER CLASS API
    // ----------------------------
    private final class SpiceListScrollListener implements OnScrollListener {
        @Override
        public void onScrollStateChanged(AbsListView view, int scrollState) {
            if (getAdapter() != null) {
                getAdapter().setNetworkFetchingAllowed(scrollState == SCROLL_STATE_IDLE);
            }
        }

        @Override
        public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
        }
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy