版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/TopWilling/article/details/80015943
关键代码
- Adapte中判断多种ViewType
- dataSize数量+1
- position的实际数量值;这里容易出现角标越界
- 具体数量的填充过程
遇到的问题
- 这样可以实现添加Header的操作;但是header带有 banner和一些自定义的控件;持有了当前页面的上下文;我用静态类的形式,通过传入上下文来控制不会默认持有当前上下文的引用;出现内存泄露.具体原因是自定义的控件中持有上下文,应该在当前页面隐藏和不可见的时候来使ta为暂停状态->放开手上的上下文.这里就牵涉到了Holder如何监听到当前fragment是否显示为前台.
- 用接口回调来实现,可以;估计还有问题.
public class HomeFragmentAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private int HEADER = 0;
private int BODY = 1;
private Context mContext;
private List<BannerBeanData.DataBean> data;
private List<String> list;
public HomeFragmentAdapter(FragmentActivity activity, List<BannerBeanData.DataBean> data, List<String> list) {
this.mContext = activity;
this.data = data;
this.list = list;
}
@Override
**public int getItemViewType(int position) {
if (position == 0) {
return HEADER;
} else {
return BODY;
}
}**
@Override
**public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
if (viewType == HEADER) {
View view = LayoutInflater.from(mContext).inflate(R.layout.header_home_laytout, parent, false);
return new HeaderHolder(view,mContext);
} else {
View view = LayoutInflater.from(mContext).inflate(R.layout.item_homelayout_layout, parent, false);
return new BodyHolder(view);
}
}**
@Override
**public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
if (position == 0) {
HeaderHolder headerHolder = (HeaderHolder) holder;
headerHolder.setData(list);
} else {
BodyHolder bodyHolder = (BodyHolder) holder;
bodyHolder.setData(data.get(position - 1));
}
}**
@Override
public int getItemCount() {
return data.size() + 1;
}
static class HeaderHolder extends RecyclerView.ViewHolder {
private HomeFragment.OnLoanFragmentItemSelectedListener mOnLoanFragmentItemSelectedListener;
}
static class BodyHolder extends RecyclerView.ViewHolder {
}
}