上篇文章记录了将viewpager抽取出来,那么这篇文章我们继续来实现,将viewpager做为头布局添加给RecyclerView。这使用到了一种设计模式 - 包装类设计模式,大家可以先了解下这个模式更有利于理解,我也会把本篇实现的思路给出个思维导图的。
看下效果图吧:
首先来个bean对象,等下封装数据使用:
public class Item {
private String maintitle;
private String subtitle;
public Item(String maintitle, String subtitle){
this.maintitle = maintitle;
this.subtitle = subtitle;
}
public String getMaintitle() {
return maintitle;
}
public String getSubtitle() {
return subtitle;
}
}
然后我们创建一个类WrapRecyclerView继承自RecyclerView:
// 将recycle进行封装
public class WrapRecyclerView extends RecyclerView {
private ArrayList<View> mHeadViewList = new ArrayList<View>();
private ArrayList<View> mFootViewList = new ArrayList<View>();
private Adapter mAdapter;
public WrapRecyclerView(Context context) {
super(context);
}
public WrapRecyclerView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public WrapRecyclerView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
public void addHeaderView(View view){
mHeadViewList.clear();
mHeadViewList.add(view);
if (mAdapter != null){
if (!(mAdapter instanceof RecylerWrapAdapter)){
mAdapter = new RecylerWrapAdapter(mHeadViewList,mFootViewList,mAdapter);
}
}
}
public void addFootView(View view){
mFootViewList.clear();
mFootViewList.add(view);
if (mAdapter != null){
if (!(mAdapter instanceof RecylerWrapAdapter)){
mAdapter = new RecylerWrapAdapter(mHeadViewList,mFootViewList,mAdapter);
}
}
}
@Override
public void setAdapter(Adapter adapter) {
if (mHeadViewList.isEmpty() && mFootViewList.isEmpty()){
super.setAdapter(adapter);
}else{
adapter = new RecylerWrapAdapter(mHeadViewList,mFootViewList,adapter);
super.setAdapter(adapter);
}
mAdapter = adapter;
}
}
//在布局使用,使用系统的SwipeRefreshLayout包裹下
<android.support.v4.widget.SwipeRefreshLayout
android:id="@+id/srl_refresh"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.wb.head.widget.WrapRecyclerView
android:id="@+id/recycler"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</android.