什么是RecyclerVIEw
关于RecyclerVIEw,是一个主要用于展示和回收VIEw的有一个控件,在官用了一句话来概括
RecyclerVIEw 是一种通过提供有限的数据项窗口有效显示大数据集的视图。
基提供几个基本的功能,
控制其显示的方式 ―――>LayoutManager―(必需)
控制Item间的间隔 ―――>Itemdecoration―-(非必需)
控制Item增删的动画――->ItemAnimator――(非必需)
以上就可以完成ListVIEw大部的功能了,但是确缺少了一个很常用的功能,就是Item的点需事件。当然,这个并不是什么问题,上文也说了,RecyclerVIEw是一个用于控制vIEw展示的回收的,其它的都由用户去定制。给了用户当的自由度。下面来看一些基本的使方式。
基本使用
由于RecyclerVIEw并不是在AndroID的基本库中,所以如果开发者需要使用RecyclerVIEw里,需要gradle引用对应的扩展包,
compile 'com.androID.support:recyclervIEw-v7:25.0.1'
这后实大家需要做的和使用ListVIEw差别也不大,只需要调置LayoutManager和Adapter就可以完成最基础的显示了。Adapter及Adapter需要的VIEwHolder均继承自RecyvlerVIEw的内部类。
RecyclerVIEw的Adapter
public class DemoAdapter extends RecyclerVIEw.Adapter<DemoVIEwHolder> { private List<String> data; public DemoAdapter(List<String> data) { this.data = data; } @OverrIDe public DemoVIEwHolder onCreateVIEwHolder(VIEwGroup parent,int vIEwType) { DemoVIEwHolder holder = new DemoVIEwHolder(LayoutInflater.from( parent.getContext()).inflate(R.layout.demo_recycler_vIEw_item,parent,false)); return holder; } @OverrIDe public voID onBindVIEwHolder(DemoVIEwHolder holder,int position) { holder.getVIEw().setText(data.get(position)); } @OverrIDe public int getItemCount() { return data.size(); }}
RecyclerVIEw的VIEwHolder
public class DemoVIEwHolder extends RecyclerVIEw.VIEwHolder { private TextVIEw vIEw; public DemoVIEwHolder(VIEw itemVIEw) { super(itemVIEw); vIEw = (TextVIEw) itemVIEw.findVIEwByID(R.ID.item_vIEw); } public TextVIEw getVIEw() { return vIEw; }}
项目主Activity
public class RecyclerVIEwDemoActivity extends AppCompatActivity { private RecyclerVIEw recyclerVIEw; @OverrIDe protected voID onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentVIEw(R.layout.activity_recycler_vIEw_demo); recyclerVIEw = (RecyclerVIEw) findVIEwByID(R.ID.recycler_vIEw); String[] datas = {"1","2","3","4","5","6","7","8","9","0","1","0"}; List<String> strings = Arrays.asList(datas); DemoAdapter adapter = new DemoAdapter(strings); recyclerVIEw.setLayoutManager(new linearlayoutmanager(this)); recyclerVIEw.setAdapter(adapter); }}
activity layout文件布局
<?xml version="1.0" enCoding="utf-8"?><relativeLayout xmlns:androID="http://schemas.androID.com/apk/res/androID" xmlns:tools="http://schemas.androID.com/tools" androID:ID="@+ID/activity_recycler_vIEw_demo" androID:layout_wIDth="match_parent" androID:layout_height="match_parent" tools:context="com.yjeeq.study.recyclervIEw.RecyclerVIEwDemoActivity"> <androID.support.v7.Widget.RecyclerVIEw androID:ID="@+ID/recycler_vIEw" androID:layout_wIDth="match_parent" androID:layout_height="match_parent"> </androID.support.v7.Widget.RecyclerVIEw></relativeLayout>
item layout文件布局
<?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="40dp" androID:orIEntation="vertical"> <TextVIEw androID:ID="@+ID/item_vIEw" androID:layout_wIDth="match_parent" androID:layout_height="match_parent" androID:background="@androID:color/holo_blue_dark" androID:gravity="center" /></linearLayout>
以下是运行效果
设置单击事件上面已经完成基本的展示,这里就介绍一下怎么为Recycler加上点击事件。其实思路很简单,就是在RecyclerVIEw上的addOnItemtouchListener上做文章。这里给出具体实现。相信大家一看就懂。
* OnItemtouchListener的实现*
public class RecyclerItemClickListener implements RecyclerVIEw.OnItemtouchListener { private VIEw childVIEw; private RecyclerVIEw touchVIEw; public RecyclerItemClickListener(Context context,final OnItemClickListener mListener) { mGestureDetector = new GestureDetector(context,new GestureDetector.SimpleOnGestureListener() { @OverrIDe public boolean onSingleTapUp(MotionEvent ev) { if (childVIEw != null && mListener != null) { mListener.onItemClick(childVIEw,touchVIEw.getChildposition(childVIEw)); } return true; } @OverrIDe public voID onLongPress(MotionEvent ev) { if (childVIEw != null && mListener != null) { mListener.onLongClick(childVIEw,touchVIEw.getChildAdapterposition(childVIEw)); } } }); } GestureDetector mGestureDetector; public interface OnItemClickListener { public voID onItemClick(VIEw vIEw,int position); public voID onLongClick(VIEw vIEw,int posotion); } @OverrIDe public boolean onIntercepttouchEvent(RecyclerVIEw recyclerVIEw,MotionEvent motionEvent) { mGestureDetector.ontouchEvent(motionEvent); childVIEw = recyclerVIEw.findChildVIEwUnder(motionEvent.getX(),motionEvent.getY()); touchVIEw = recyclerVIEw; return false; } @OverrIDe public voID ontouchEvent(RecyclerVIEw recyclerVIEw,MotionEvent motionEvent) { } @OverrIDe public voID onRequestdisallowIntercepttouchEvent(boolean disallowIntercept) { }}
使用方式
首先在主类继承 RecyclerItemClickListener.OnItemClickListener,之后在主类中添加如下方法。
private voID setonItemClick() { recyclerVIEw.addOnItemtouchListener(new RecyclerItemClickListener(this,this)); } public voID onItemClick(VIEw vIEw,int position) { Log.d("XXXXXX","onItemClick : postion " + position); } @OverrIDe public voID onLongClick(VIEw vIEw,int posotion) { Log.d("XXXXXX","onLongClick position : " + posotion); }
基本使用参考 : https://www.oudahe.com/p/16478/
点击是件参考 : https://www.oudahe.com/p/26551/
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程小技巧。
总结以上是内存溢出为你收集整理的Android RecyclerView基本使用详解全部内容,希望文章能够帮你解决Android RecyclerView基本使用详解所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)