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);

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
RecyclerViewAndroid提供的一个非常灵活的控件,用于显示大量数据的列表,它的核心是ViewHolder和AdapterViewHolder是RecyclerView的一个子类,它主要用于缓存item的视图,以便能够快速地滚动和重新使用这些视图。ViewHolder的实现非常简单,只需要继承RecyclerView.ViewHolder,然后在构造函数中初始化视图,最后将视图绑定到ViewHolder中。 AdapterRecyclerView的另一个子类,它主要用于管理数据和视图之间的关系。Adapter必须实现三个方法:onCreateViewHolder、onBindViewHolder和getItemCount。其中onCreateViewHolder方法用于创建ViewHolder,onBindViewHolder方法用于将数据绑定到ViewHolder中,getItemCount方法用于获取数据的数量。 以下是一个简单的RecyclerViewViewHolder和Adapter的实现示例: ViewHolder的实现: ``` public class MyViewHolder extends RecyclerView.ViewHolder { private TextView mTextView; public MyViewHolder(View itemView) { super(itemView); mTextView = itemView.findViewById(R.id.text_view); } public void bind(String text) { mTextView.setText(text); } } ``` Adapter的实现: ``` public class MyAdapter extends RecyclerView.Adapter<MyViewHolder> { private List<String> mData; public MyAdapter(List<String> data) { mData = data; } @Override public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View itemView = LayoutInflater.from(parent.getContext()) .inflate(R.layout.item_view, parent, false); return new MyViewHolder(itemView); } @Override public void onBindViewHolder(MyViewHolder holder, int position) { holder.bind(mData.get(position)); } @Override public int getItemCount() { return mData.size(); } } ``` 在这个示例中,我们创建了一个ViewHolder,它包含一个TextView,用于显示列表项的文本。我们还创建了一个Adapter,它管理一个字符串列表,并将每个字符串绑定到ViewHolder中的TextView中。 最后,我们需要将Adapter设置到RecyclerView中: ``` RecyclerView recyclerView = findViewById(R.id.recycler_view); MyAdapter adapter = new MyAdapter(data); recyclerView.setAdapter(adapter); ``` 这样就可以显示一个简单的RecyclerView了。当我们滚动列表时,RecyclerView会自动回收不再需要的视图,并将它们重新用于新的列表项。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值