Android RecycleView添加head配置封装的实例

Android RecycleView添加head配置封装的实例,第1张

概述AndroidRecycleView添加head配置封装实例这个是把RecycleView的适配器给封装了,直接调用就可以了,还添加了可以添加head头部功能,很赞的,今天记下来,下次直接用 

AndroID RecycleVIEw添加head配置封装的实例

这个是把RecycleVIEw的适配器给封装了,直接调用就可以了,还添加了可以添加head头部功能,很赞的,今天记下来,下次直接用 

实例代码:

package com.wwl.androID;  import androID.support.v7.Widget.GrIDLayoutManager; import androID.support.v7.Widget.RecyclerVIEw; import androID.support.v7.Widget.StaggeredGrIDLayoutManager; import androID.vIEw.VIEw; import androID.vIEw.VIEwGroup;  import java.util.ArrayList;   public abstract class BaseRecyclerAdapter<T> extends RecyclerVIEw.Adapter<RecyclerVIEw.VIEwHolder> {    public static final int TYPE_header = 0;   public static final int TYPE_norMAL = 1;    private ArrayList<T> mDatas = new ArrayList<>();    private VIEw mheaderVIEw;    private OnItemClickListener mListener;    public voID setonItemClickListener(OnItemClickListener li) {     mListener = li;   }    public voID setheaderVIEw(VIEw headerVIEw) {     mheaderVIEw = headerVIEw;     notifyItemInserted(0);   }    public VIEw getheaderVIEw() {     return mheaderVIEw;   }    public voID addDatas(ArrayList<T> datas) {     mDatas.addAll(datas);     notifyDataSetChanged();   }    @OverrIDe   public int getItemVIEwType(int position) {     if(mheaderVIEw == null) return TYPE_norMAL;     if(position == 0) return TYPE_header;     return TYPE_norMAL;   }    @OverrIDe   public RecyclerVIEw.VIEwHolder onCreateVIEwHolder(VIEwGroup parent,final int vIEwType) {     if(mheaderVIEw != null && vIEwType == TYPE_header) return new Holder(mheaderVIEw);     return onCreate(parent,vIEwType);   }     @OverrIDe   public voID onBindVIEwHolder(RecyclerVIEw.VIEwHolder vIEwHolder,int position) {     if(getItemVIEwType(position) == TYPE_header) return;      final int pos = getRealposition(vIEwHolder);     final T data = mDatas.get(pos);     onBind(vIEwHolder,pos,data);      if(mListener != null) {       vIEwHolder.itemVIEw.setonClickListener(new VIEw.OnClickListener() {         @OverrIDe         public voID onClick(VIEw v) {           mListener.onItemClick(pos,data);         }       });     }   }    @OverrIDe   public voID onAttachedToRecyclerVIEw(RecyclerVIEw recyclerVIEw) {     super.onAttachedToRecyclerVIEw(recyclerVIEw);      RecyclerVIEw.LayoutManager manager = recyclerVIEw.getLayoutManager();     if(manager instanceof GrIDLayoutManager) {       final GrIDLayoutManager grIDManager = ((GrIDLayoutManager) manager);       grIDManager.setSpanSizeLookup(new GrIDLayoutManager.SpanSizeLookup() {         @OverrIDe         public int getSpanSize(int position) {           return getItemVIEwType(position) == TYPE_header               ? grIDManager.getSpanCount() : 1;         }       });     }   }    @OverrIDe   public voID onVIEwAttachedToWindow(RecyclerVIEw.VIEwHolder holder) {     super.onVIEwAttachedToWindow(holder);     VIEwGroup.LayoutParams lp = holder.itemVIEw.getLayoutParams();     if(lp != null         && lp instanceof StaggeredGrIDLayoutManager.LayoutParams         && holder.getLayoutposition() == 0) {       StaggeredGrIDLayoutManager.LayoutParams p = (StaggeredGrIDLayoutManager.LayoutParams) lp;       p.setFullSpan(true);     }   }    public int getRealposition(RecyclerVIEw.VIEwHolder holder) {     int position = holder.getLayoutposition();     return mheaderVIEw == null ? position : position - 1;   }    @OverrIDe   public int getItemCount() {     return mheaderVIEw == null ? mDatas.size() : mDatas.size() + 1;   }    public abstract RecyclerVIEw.VIEwHolder onCreate(VIEwGroup parent,final int vIEwType);   public abstract voID onBind(RecyclerVIEw.VIEwHolder vIEwHolder,int Realposition,T data);    public class Holder extends RecyclerVIEw.VIEwHolder {     public Holder(VIEw itemVIEw) {       super(itemVIEw);     }   }    public interface OnItemClickListener<T> {     voID onItemClick(int position,T data);   } } 

  然后在外面自己的适配器中直接继承就可以了

package com.wwl.androID;  import androID.support.v7.Widget.RecyclerVIEw; import androID.vIEw.LayoutInflater; import androID.vIEw.VIEw; import androID.vIEw.VIEwGroup; import androID.Widget.TextVIEw;  /**  * wwl  */ public class MyAdapter extends BaseRecyclerAdapter<String> {    @OverrIDe   public RecyclerVIEw.VIEwHolder onCreate(VIEwGroup parent,int vIEwType) {     VIEw layout = LayoutInflater.from(parent.getContext()).inflate(R.layout.item,parent,false);     return new MyHolder(layout);   }    @OverrIDe   public voID onBind(RecyclerVIEw.VIEwHolder vIEwHolder,String data) {     if(vIEwHolder instanceof MyHolder) {       ((MyHolder) vIEwHolder).text.setText(data);     }   }    class MyHolder extends BaseRecyclerAdapter.Holder {     TextVIEw text;     public MyHolder(VIEw itemVIEw) {       super(itemVIEw);       text = (TextVIEw) itemVIEw.findVIEwByID(R.ID.text);     }   } }  

 然后在类中调用,

public class MainActivity extends AppCompatActivity {    private RecyclerVIEw mRecyclerVIEw;   private RecyclerVIEw.LayoutManager mLayoutManager;   private MyAdapter mAdapter;    @OverrIDe   protected voID onCreate(Bundle savedInstanceState) {     super.onCreate(savedInstanceState);     setContentVIEw(R.layout.activity_main);      mRecyclerVIEw = (RecyclerVIEw) findVIEwByID(R.ID.List); //    mLayoutManager = new linearlayoutmanager(this,linearlayoutmanager.VERTICAL,false);     mLayoutManager = new GrIDLayoutManager(this,2); //    mLayoutManager = new StaggeredGrIDLayoutManager(2,StaggeredGrIDLayoutManager.VERTICAL);     mRecyclerVIEw.setLayoutManager(mLayoutManager);     mRecyclerVIEw.setItemAnimator(new DefaultItemAnimator());     mRecyclerVIEw.addItemdecoration(new GrIDItemdecoration(this,true));      mAdapter = new MyAdapter();     mRecyclerVIEw.setAdapter(mAdapter);     mAdapter.addDatas(generateData());     setheader(mRecyclerVIEw);     mAdapter.setonItemClickListener(new BaseRecyclerAdapter.OnItemClickListener<String>() {       @OverrIDe       public voID onItemClick(int position,String data) {         Toast.makeText(MainActivity.this,position + "," + data,Toast.LENGTH_SHORT).show();       }     });   }    private voID setheader(RecyclerVIEw vIEw) {     VIEw header = LayoutInflater.from(this).inflate(R.layout.header,vIEw,false);          mAdapter.setheaderVIEw(header);   }    private ArrayList<String> generateData() {     ArrayList<String> data = new ArrayList<String>() {       {         for(int i=0;i<21;i++) add("数据" + i);       }     };     return data;   }    } 

 这样就OK啦。 

布局文件:

R.layout.activity_main 

<?xml version="1.0" enCoding="utf-8"?> <linearLayout xmlns:androID="http://schemas.androID.com/apk/res/androID"   xmlns:tools="http://schemas.androID.com/tools"   androID:layout_wIDth="match_parent"   androID:layout_height="match_parent">    <androID.support.v7.Widget.RecyclerVIEw     androID:ID="@+ID/List"     androID:layout_wIDth="match_parent"     androID:layout_height="match_parent" />  </linearLayout> 

header.xml 

<?xml version="1.0" enCoding="utf-8"?> <linearLayout xmlns:androID="http://schemas.androID.com/apk/res/androID"   androID:layout_wIDth="match_parent"   androID:layout_height="wrap_content"   androID:orIEntation="vertical">    <ImageVIEw     androID:layout_gravity="center_horizontal"     androID:layout_wIDth="wrap_content"     androID:layout_height="wrap_content"     androID:src="@mipmap/ic_launcher"/>  </linearLayout> 

   item.xml 

<?xml version="1.0" enCoding="utf-8"?> <relativeLayout xmlns:androID="http://schemas.androID.com/apk/res/androID"   androID:layout_wIDth="match_parent"   androID:layout_height="wrap_content"   androID:padding="20dp"   androID:orIEntation="vertical">    <TextVIEw     androID:ID="@+ID/text"     androID:layout_wIDth="wrap_content"     androID:layout_height="wrap_content"     androID:layout_centerInParent="true"     androID:text="数据"/>  </relativeLayout> 

以上就是AndroID RecycleVIEw添加head配置封装的实例,如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

总结

以上是内存溢出为你收集整理的Android RecycleView添加head配置封装的实例全部内容,希望文章能够帮你解决Android RecycleView添加head配置封装的实例所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1144597.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-31
下一篇2022-05-31

发表评论

登录后才能评论

评论列表(0条)

    保存