基类,contentView为加载页面部分,Data设置数据类型,Context上下文,可以获取自定义应用application时的创建的,省去传入的麻烦。
public abstract class BaseHolder<Data> { private View contentView; private Data data; protected Context context; public BaseHolder(Context context){ this.context=context; contentView=initView(); contentView.setTag(this); } /** 创建界面*/ public abstract View initView(); public View getContentView() { return contentView; } public void setData(Data data){ this.data=data; refreshView(data); } /** 根据数据刷新界面*/ public abstract void refreshView(Data data); }
BannerBean.class
public class BannerBean { private String url; private String title; public BannerBean(String url, String title) { this.url = url; this.title = title; } public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } }
添加到
public class SecondActivty extends AppCompatActivity { HeaderAndFooterWrapper mHeaderAndFooterWrapper; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.second_activity); RecyclerView rv = (RecyclerView) findViewById(R.id.second_rv); rv.setLayoutManager(new LinearLayoutManager(this)); MultAdapter mAdapter = new MultAdapter(this, new DataFactory().setMultData()); //在RecyclerView设置adpter之后 mHeaderAndFooterWrapper = new HeaderAndFooterWrapper(mAdapter); HeadHolder headHolder=new HeadHolder(this); headHolder.setData(new BannerBean(DataFactory.url2,"头布局")); mHeaderAndFooterWrapper.addHeaderView(headHolder.getContentView()); rv.setAdapter(mHeaderAndFooterWrapper); mAdapter.setOnItemClickListener(new MultiItemTypeAdapter.OnItemClickListener(){ @Override public void onItemClick(View view, RecyclerView.ViewHolder holder, int position) { Toast.makeText(SecondActivty.this, "点击位置:"+(position-mHeaderAndFooterWrapper.getHeadersCount()), Toast.LENGTH_SHORT).show(); } }); } }
正是下面部分把原来要处理头布局的逻辑转到HeadHolder.class中去了
HeadHolder headHolder=new HeadHolder(this);
headHolder.setData(new BannerBean(DataFactory.url2,"头布局"));
mHeaderAndFooterWrapper.addHeaderView(headHolder.getContentView());