首先导入所依赖的jar包:
compile 'com.android.support:recyclerview-v7:25.3.1'
最重要的就是adapter:
/** * 作者:jiuqunZhang on 2018/7/4 10:20 * 邮箱:woshizhangjiqun@gmail.com */ public class MyAdapter extends RecyclerView.Adapter { private RecyclerView mRecyclerView; private List data = new ArrayList(); private Context mContext; private View VIEW_FOOTER; private View VIEW_HEADER; //Type private int TYPE_NORMAL = 1000; private int TYPE_HEADER = 1001; private int TYPE_FOOTER = 1002; public MyAdapter(List data, Context mContext) { this.data = data; this.mContext = mContext; } @Override public MyAdapter.MyHolder onCreateViewHolder(ViewGroup parent, int viewType) { if (viewType == TYPE_FOOTER) { return new MyHolder(VIEW_FOOTER); } else if (viewType == TYPE_HEADER) { return new MyHolder(VIEW_HEADER); } else { return new MyHolder(getLayout(R.layout.item_list_layout)); } } @Override public void onBindViewHolder(MyHolder holder, int position) { if (!isHeaderView(position) && !isFooterView(position)) { if (haveHeaderView()) position--; TextView content = (TextView) holder.itemView.findViewById(R.id.item_content); TextView time = (TextView) holder.itemView.findViewById(R.id.item_time); content.setText(data.get(position)); time.setText("2016-1-1"); } } @Override public int getItemCount() { int count = (data == null ? 0 : data.size()); if (VIEW_FOOTER != null) { count++; } if (VIEW_HEADER != null) { count++; } return count; } @Override public int getItemViewType(int position) { if (isHeaderView(position)) { return TYPE_HEADER; } else if (isFooterView(position)) { return TYPE_FOOTER; } else { return TYPE_NORMAL; } } @Override public void onAttachedToRecyclerView(RecyclerView recyclerView) { try { if (mRecyclerView == null && mRecyclerView != recyclerView) { mRecyclerView = recyclerView; } ifGridLayoutManager(); } catch (Exception e) { e.printStackTrace(); } } private View getLayout(int layoutId) { return LayoutInflater.from(mContext).inflate(layoutId, null); } public void addHeaderView(View headerView) { if (haveHeaderView()) { throw new IllegalStateException("hearview has already exists!"); } else { //避免出现宽度自适应 ViewGroup.LayoutParams params = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); headerView.setLayoutParams(params); VIEW_HEADER = headerView; ifGridLayoutManager(); notifyItemInserted(0); } } public void addFooterView(View footerView) { if (haveFooterView()) { throw new IllegalStateException("footerView has already exists!"); } else { ViewGroup.LayoutParams params = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); footerView.setLayoutParams(params); VIEW_FOOTER = footerView; ifGridLayoutManager(); notifyItemInserted(getItemCount() - 1); } } private void ifGridLayoutManager() { if (mRecyclerView == null) return; final RecyclerView.LayoutManager layoutManager = mRecyclerView.getLayoutManager(); if (layoutManager instanceof GridLayoutManager) { final GridLayoutManager.SpanSizeLookup originalSpanSizeLookup = ((GridLayoutManager) layoutManager).getSpanSizeLookup(); ((GridLayoutManager) layoutManager).setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() { @Override public int getSpanSize(int position) { return (isHeaderView(position) || isFooterView(position)) ? ((GridLayoutManager) layoutManager).getSpanCount() : 1; } }); } } private boolean haveHeaderView() { return VIEW_HEADER != null; } public boolean haveFooterView() { return VIEW_FOOTER != null; } private boolean isHeaderView(int position) { return haveHeaderView() && position == 0; } private boolean isFooterView(int position) { return haveFooterView() && position == getItemCount() - 1; } public static class MyHolder extends RecyclerView.ViewHolder { public MyHolder(View itemView) { super(itemView); } } }
在mainActivity中声明《recycleview》最好是match_parent,之后在mainActivity中findviewbyid。
private void initRecyc() { mRecyclerView.setLayoutManager(new LinearLayoutManager(this)); List data=new ArrayList(); for (int i = 0; i < 10; i++) { data.add(i+"xianjin"); } mMyAdapter = new MyAdapter(data, this); mRecyclerView.setAdapter(mMyAdapter); mMyAdapter.addFooterView(LayoutInflater.from(this).inflate(R.layout.item_footer_layout,null)); mMyAdapter.addHeaderView(LayoutInflater.from(this).inflate(R.layout.item_header_layout,null)); }
下面是item_header_layout.xml:
下面是item_list_layout.xml;
这就是全部的过程 ,重点在于MyAdapter。