package in.srain.cube.views; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.widget.AbsListView; import android.widget.AbsListView.OnScrollListener; import android.widget.AdapterView; import android.widget.AdapterView.OnItemSelectedListener; import android.widget.ListAdapter; import com.shizhefei.mvc.ILoadViewFactory.FootViewAdder; import com.shizhefei.mvc.ILoadViewFactory.ILoadMoreView; import com.shizhefei.mvc.MVCHelper.OnScrollBottomListener; import com.shizhefei.mvc.viewhandler.ViewHandler; public class GridViewHandler implements ViewHandler { @Override public boolean handleSetAdapter(View contentView, Object viewAdapter, ILoadMoreView loadMoreView, OnClickListener onClickLoadMoreListener) { final GridViewWithHeaderAndFooter gridView = (GridViewWithHeaderAndFooter) contentView; boolean hasInit = false; if (loadMoreView != null) { loadMoreView.init(new GridViewFFootViewAdder(gridView), onClickLoadMoreListener); hasInit = true; } gridView.setAdapter((ListAdapter) viewAdapter); return hasInit; } @Override public void setOnScrollBottomListener(View contentView, OnScrollBottomListener onScrollBottomListener) { GridViewWithHeaderAndFooter listView = (GridViewWithHeaderAndFooter) contentView; listView.setOnScrollListener(new ListViewOnScrollListener(onScrollBottomListener)); listView.setOnItemSelectedListener(new ListViewOnItemSelectedListener(onScrollBottomListener)); } /** * 针对于电视 选择到了底部项的时候自动加载更多数据 */ private class ListViewOnItemSelectedListener implements OnItemSelectedListener { private OnScrollBottomListener onScrollBottomListener; public ListViewOnItemSelectedListener(OnScrollBottomListener onScrollBottomListener) { super(); this.onScrollBottomListener = onScrollBottomListener; } @Override public void onItemSelected(AdapterView<?> listView, View view, int position, long id) { if (listView.getLastVisiblePosition() + 1 == listView.getCount()) {// 如果滚动到最后一行 if (onScrollBottomListener != null) { onScrollBottomListener.onScorllBootom(); } } } @Override public void onNothingSelected(AdapterView<?> parent) { } }; /** * 滚动到底部自动加载更多数据 */ private static class ListViewOnScrollListener implements OnScrollListener { private OnScrollBottomListener onScrollBottomListener; public ListViewOnScrollListener(OnScrollBottomListener onScrollBottomListener) { super(); this.onScrollBottomListener = onScrollBottomListener; } @Override public void onScrollStateChanged(AbsListView listView, int scrollState) { if (scrollState == OnScrollListener.SCROLL_STATE_IDLE && listView.getLastVisiblePosition() + 1 == listView.getCount()) {// 如果滚动到最后一行 if (onScrollBottomListener != null) { onScrollBottomListener.onScorllBootom(); } } } @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { } }; private class GridViewFFootViewAdder implements FootViewAdder { private GridViewWithHeaderAndFooter gridView; public GridViewFFootViewAdder(GridViewWithHeaderAndFooter gridView) { super(); this.gridView = gridView; } @Override public View addFootView(int layoutId) { View view = LayoutInflater.from(gridView.getContext()).inflate(layoutId, gridView, false); return addFootView(view); } @Override public View addFootView(View view) { gridView.addFooterView(view); return view; } @Override public View getContentView() { return gridView; } } }