DefaultAdapter

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;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值