package com.shizhefei.mvc.viewhandler; 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.ExpandableListAdapter; import android.widget.ExpandableListView; import android.widget.ListAdapter; import android.widget.ListView; import com.shizhefei.mvc.ILoadViewFactory.FootViewAdder; import com.shizhefei.mvc.ILoadViewFactory.ILoadMoreView; import com.shizhefei.mvc.MVCHelper.OnScrollBottomListener; public class ListViewHandler implements ViewHandler { @Override public boolean handleSetAdapter(View contentView, Object viewAdapter, ILoadMoreView loadMoreView, OnClickListener onClickLoadMoreListener) { final ListView listView = (ListView) contentView; boolean hasInit = false; if (loadMoreView != null) { loadMoreView.init(new ListViewFootViewAdder(listView), onClickLoadMoreListener); hasInit = true; } if (listView instanceof ExpandableListView) { ((ExpandableListView) listView).setAdapter((ExpandableListAdapter) viewAdapter); } else { listView.setAdapter((ListAdapter) viewAdapter); } return hasInit; } @Override public void setOnScrollBottomListener(View contentView, OnScrollBottomListener onScrollBottomListener) { ListView listView = (ListView) contentView; listView.setOnScrollListener(new ListViewOnScrollListener(onScrollBottomListener)); listView.setOnItemSelectedListener(new ListViewOnItemSelectedListener(onScrollBottomListener)); } /** * 针对于电视 选择到了底部项的时候自动加载更多数据 */ private static 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 static class ListViewFootViewAdder implements FootViewAdder { private ListView listView; public ListViewFootViewAdder(ListView listView) { super(); this.listView = listView; } @Override public View addFootView(int layoutId) { View view = LayoutInflater.from(listView.getContext()).inflate(layoutId, listView, false); return addFootView(view); } @Override public View addFootView(View view) { listView.addFooterView(view); return view; } @Override public View getContentView() { return listView; } } }