android优化 分割线,Android RecyclerView的ViewHolder和Adapter的封装优化

/**

* 基础的Adapter

*

* Created by DevWiki on 2016/7/13.

*/

public abstract class BaseAdapter extends AbsAdapter {

private List dataList;

public BaseAdapter(Context   context) {

super(context);

this.dataList   = new ArrayList<>();

}

public BaseAdapter(Context   context, List list) {

super(context);

this.dataList   = new ArrayList<>();

this.dataList.addAll(list);

}

/**

* 填充数据,此操作会清除原来的数据

*

* @param list 要填充的数据

* @return true:填充成功并调用刷新数据

*/

public boolean fillList(List   list) {

dataList.clear();

boolean   result = dataList.addAll(list);

if (result)   {

notifyDataSetChanged();

}

return result;

}

/**

* 追加一条数据

*

* @param data 要追加的数据

* @return true:追加成功并刷新界面

*/

public boolean appendItem(M   data) {

boolean   result = dataList.add(data);

if (result)   {

if   (getHeaderExtraViewCount() == 0) {

notifyItemInserted(dataList.size()   - 1);

}   else {

notifyItemInserted(dataList.size());

}

}

return result;

}

/**

* 追加集合数据

*

* @param list 要追加的集合数据

* @return 追加成功并刷新

*/

public boolean appendList(List   list) {

boolean   result = dataList.addAll(list);

if (result)   {

notifyDataSetChanged();

}

return result;

}

/**

* 在最顶部前置数据

*

* @param data 要前置的数据

*/

public void proposeItem(M data)   {

dataList.add(0,   data);

if (getHeaderExtraViewCount()   == 0) {

notifyItemInserted(0);

} else {

notifyItemInserted(getHeaderExtraViewCount());

}

}

/**

* 在顶部前置数据集合

*

* @param list 要前置的数据集合

*/

public void proposeList(List   list) {

dataList.addAll(0,   list);

notifyDataSetChanged();

}

@Override

public long getItemId(int position)   {

return position;

}

@Override

public final int getItemViewType(int   position) {

if (headerView   != null && position == 0) {

return   VIEW_TYPE_HEADER;

} else if   (footerView != null && position == dataList.size() +   getHeaderExtraViewCount()) {

return   VIEW_TYPE_FOOTER;

} else {

return   getCustomViewType(position);

}

}

/**

* 获取自定义View的类型

*

* @param position 位置

* @return View的类型

*/

public abstract int getCustomViewType(int   position);

@Override

public int getItemCount() {

return dataList.size()   + getExtraViewCount();

}

/**

* 根据位置获取一条数据

*

* @param position View的位置

* @return 数据

*/

public M getItem(int position)   {

if (headerView   != null && position == 0

||   position >= dataList.size() + getHeaderExtraViewCount()) {

return   null;

}

return headerView   == null ? dataList.get(position) : dataList.get(position - 1);

}

/**

* 根据ViewHolder获取数据

*

* @param holder   ViewHolder

* @return 数据

*/

public M getItem(VH holder) {

return getItem(holder.getAdapterPosition());

}

public void updateItem(M data)   {

int index   = dataList.indexOf(data);

if (index   < 0) {

return;

}

dataList.set(index,   data);

if (headerView   == null) {

notifyItemChanged(index);

} else {

notifyItemChanged(index   + 1);

}

}

/**

* 移除一条数据

*

* @param position 位置

*/

public void removeItem(int position)   {

if (headerView   == null) {

dataList.remove(position);

} else {

dataList.remove(position   - 1);

}

notifyItemRemoved(position);

}

/**

* 移除一条数据

*

* @param data 要移除的数据

*/

public void removeItem(M data)   {

int index   = dataList.indexOf(data);

if (index   < 0) {

return;

}

dataList.remove(index);

if (headerView   == null) {

notifyItemRemoved(index);

} else {

notifyItemRemoved(index   + 1);

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值