private boolean isMore;
public MySection(boolean isHeader, String header) {
super(isHeader, header);
}
public MySection(Video t) {
super(t);
}
}
我的理解:上面的Video是实体类,MySection是包装Video的实体类,之所以这样做,是为了让实体类Video可以去继承其他类,这样就不影响实体类了.
adapter构造需要传入两个布局id,第一个是item的,第二个是head的,在convert方法里面加载item数据,在convertHead方法里面加载head数据
public SectionAdapter(int layoutResId, int sectionHeadResId, List data) {
super(layoutResId, sectionHeadResId, data);
}
@Override
protected void convert(BaseViewHolder helper, MySection item) {
helper.setImageUrl(R.id.iv, (String) item.t);
}
@Override
protected void convertHead(BaseViewHolder helper,final MySection item) {
helper.setText(R.id.header, item.header);
helper.setOnClickListener(R.id.more, new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(context,item.header+“more…”,Toast.LENGTH_LONG).show();
}
});
}
实体类的公有抽象父类SectionEntity
public abstract class SectionEntity implements Serializable {
/**
- 是否是分组header
*/
public boolean isHeader;
/**
- 包装的实体类,可以没有
*/
public T t;
/**
- 分组header标题
*/
public String header;
public SectionEntity(boolean isHeader, String header) {
this.isHeader = isHeader;
this.header = header;
this.t = null;
}
public SectionEntity(T t) {
this.isHeader = false;
this.header = null;
this.t = t;
}
}
首先,我们有了这个抽象的父类之后,需要实现分组的列表的实体类就必须继承自该抽象父类,然后我们在BaseSectionQuickAdapter中才好根据实体类里面的属性isHeader来分辨是否是header.
单独为分组布局定做一个BaseAdapter
public abstract class BaseSectionQuickAdapter<T extends SectionEntity, K extends BaseViewHolder>
extends BaseQuickAdapter<T, K> {
/**
- 分组header布局id
*/
protected int mSectionHeadResId;
/**
- 分组header类型
*/
protected static final int SECTION_HEADER_VIEW = 0x00000444;
/**
-
Same as QuickAdapter#QuickAdapter(Context,int) but with
-
some initialization data.
-
@param layoutResId The layout resource id of each item.
-
@param sectionHeadResId The section head layout id for each item
-
@param data A new list is created out of this one to avoid mutable list
*/
public BaseSectionQuickAdapter(int layoutResId, int sectionHeadResId, List data) {
super(layoutResId, data);
this.mSectionHeadResId = sectionHeadResId;
}
@Override
protected int getDefItemViewType(int position) {
//item的类型 根据实体类里的一个属性 分组RecyclerView里,要么是分组header,要么是普通item
return mData.get(position).isHeader ? SECTION_HEADER_VIEW : 0;
}
@Override
protected K onCreateDefViewHolder(ViewGroup parent, int viewType) {
//创建ViewHolder 如果是分组header,那么view是mSectionHeadResId加载出来的
if (viewType == SECTION_HEADER_VIEW)
return createBaseViewHolder(getItemView(mSectionHeadResId, parent));
//分组内的item,则用默认的方法创建ViewHolder
return super.onCreateDefViewHolder(parent, viewType);
}
@Override
protected boolean isFixedViewType(int type) {
//分组header也是特殊布局,也需要进行跨格子(在GridLayoutManager中,比如SpanCount为2,那么分组header的跨度就是2)
return super.isFixedViewType(type) || type == SECTION_HEADER_VIEW;
}
@Override
public void onBindViewHolder(K holder, int position) {
switch (holder.getItemViewType()) {
最后
经过日积月累, 以下是小编归纳整理的深入了解Java虚拟机文档,希望可以帮助大家过关斩将顺利通过面试。
由于整个文档比较全面,内容比较多,篇幅不允许,下面以截图方式展示 。
由于篇幅限制,文档的详解资料太全面,细节内容太多,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
参考文章链接:https://mp.weixin.qq.com/s?__biz=Mzg5NDUxMjUyOQ==&mid=2247483799&idx=1&sn=b6228e0c112316308a8cc0eca3ceafd2&chksm=c01f3d69f768b47f514a4592749567592b626438aff6cf2321b6c1f5431d2e0a489e23a603aa#rd
内容!**
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
参考文章链接:https://mp.weixin.qq.com/s?__biz=Mzg5NDUxMjUyOQ==&mid=2247483799&idx=1&sn=b6228e0c112316308a8cc0eca3ceafd2&chksm=c01f3d69f768b47f514a4592749567592b626438aff6cf2321b6c1f5431d2e0a489e23a603aa#rd