package com.afollestad.silk.views.list; import android.content.Context; import android.util.AttributeSet; import android.widget.AbsListView; import android.widget.GridView; import android.widget.ListAdapter; import com.afollestad.silk.adapters.SilkAdapter; /** * A {@link android.widget.GridView} that connects to a {@link com.afollestad.silk.adapters.SilkAdapter} and notifies the adapter of its scroll state. * <p/> * When the GridView becomes idle (is no longer being scrolled or flinged), it notifies the adapter causing it to update. * <p/> * You can use getScrollState() from within a {@link com.afollestad.silk.adapters.SilkAdapter} to only load images when the ListView isn't scrolling. * * @author Aidan Follestad (afollestad) */ public class SilkGridView extends GridView { private int lastState; public SilkGridView(Context context) { super(context); init(); } public SilkGridView(Context context, AttributeSet attrs) { super(context, attrs); init(); } public SilkGridView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); init(); } private void init() { setOnScrollListener(new OnScrollListener() { @Override public void onScrollStateChanged(AbsListView view, int scrollState) { if (lastState == scrollState) return; lastState = scrollState; SilkAdapter adapter = (SilkAdapter) getAdapter(); adapter.setScrollState(scrollState); if (scrollState == SCROLL_STATE_IDLE) { // When the list is idle, notify the adapter to update (causing images to load) adapter.notifyDataSetChanged(); } } @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { } }); } /** * @deprecated Use {@link #setSilkAdapter(com.afollestad.silk.adapters.SilkAdapter)} instead. */ @Override public void setAdapter(ListAdapter adapter) { throw new RuntimeException("Please use setSilkAdapter() instead of setAdapter() on the SilkListView."); } /** * Sets the list's adapter, enforces the use of only a SilkAdapter, not any other type of adapter */ public final void setSilkAdapter(SilkAdapter adapter) { super.setAdapter(adapter); } }