package com.liuxuyang.myapplication.base; import android.view.View; import android.view.ViewGroup; import android.widget.AbsListView; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.BaseAdapter; import android.widget.ListView; import java.util.List; public abstract class DefaultAdapter<Data> extends BaseAdapter implements OnItemClickListener { public static final int MORE_VIEW_TYPE = 0; public static final int ITEM_VIEW_TYPE = 1; public static final int PAGE_SIZE=10; public AbsListView getmListView() { return mListView; } protected AbsListView mListView;//和该adapter关联的listView private List<Data> mDatas;//adapter的数据集 private volatile boolean mIsLoading; private MoreHolder mMoreHolder; public DefaultAdapter(AbsListView listView, List<Data> datas) { mListView = listView; if (null != listView) { //设置 listView.setOnItemClickListener(this); } setData(datas); } public void setData(List<Data> datas) { mDatas = datas; } public List<Data> getData() { return mDatas; } @Override public long getItemId(int position) { return position; } @Override public int getCount() { if (mDatas != null) { // return mDatas.size() + 1;// 加1是为了最后加载更多的布局 return mDatas.size() + 1; } return 0; } @Override public Data getItem(int position) { if (mDatas != null && position < mDatas.size()) { return mDatas.get(position); } return null; } int height; @Override public View getView(int position, View convertView, ViewGroup parent) { BaseHolder<Data> holder; if (convertView != null && convertView.getTag() instanceof BaseHolder) { holder = (BaseHolder<Data>) convertView.getTag(); } else { if (getItemViewType(position) == MORE_VIEW_TYPE) { holder = getMoreHolder(); } else { holder = getHolder(); height = holder.getContentView().getMeasuredHeight(); } } if (getItemViewType(position) !=MORE_VIEW_TYPE) { holder.setData(mDatas.get(position)); } holder.setPosition(position); return holder.getContentView(); } public int getHeaderViewCount() { int count = 0; if (mListView != null && mListView instanceof ListView) { ListView listView = (ListView) mListView; count = listView.getHeaderViewsCount(); } return count; } // 获取item有几种类型,默认是一种类型,这里在加一是为了做加载更多。 @Override public int getViewTypeCount() { return super.getViewTypeCount() + 1;// 加1是为了最后加载更多的布局 } // 根据position位置返回哪种item展示类型 @Override public int getItemViewType(int position) { if (position == getCount() - 1) { return MORE_VIEW_TYPE;// 加载更多的布局 } else { return getItemViewTypeInner(position); } } public int getItemViewTypeInner(int position) { return ITEM_VIEW_TYPE;// 普通item的布局 } protected abstract BaseHolder getHolder(); public BaseHolder getMoreHolder() { if (mMoreHolder == null) { mMoreHolder = new MoreHolder(this, hasMore()) { }; } return mMoreHolder; } public final void loadMore() { if( loadMoreListener!=null){ loadMoreListener.loadMore((MoreHolder) getMoreHolder()); } } /** 加载更多的回调方法 */ private LoadMoreInterface loadMoreListener; public interface LoadMoreInterface { void loadMore(MoreHolder holder); } /**默认不需要加载更多*/ public boolean hasMore() { return false; } /*** * 设置加载更多的监听事件 * * @param loadMoreListener */ public void setLoadMoreListener(LoadMoreInterface loadMoreListener) { this.loadMoreListener = loadMoreListener; } @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { position = position - getHeaderViewCount();// 此时的position是加上了header的 onItemClickInner(position); } /***条目的点击事件*/ public void onItemClickInner(int position) { } public int getItemHeight() { return height; } }
DefaultAdapter
最新推荐文章于 2021-12-06 15:52:57 发布