RecyclerView的使用与解析

    xiaoxiao2022-06-24  28

    看了鸿洋大神关于Recyclerview这个控件的使用和解析之后,感触颇多,故结合自己的理解写下此篇博客,以备以后学习之用,本博文从Recyclerview控件的三个使用方面来进行介绍。

    首先,什么是Recyclerview?Recycleview的作用是保证在手机屏幕有限的空间内完成大量数据的展示,比如我们熟悉的Listview和GridView均可实现此功能。那么为什么我们还需要Recyclerviewz这个控件呢?因为Recyclerview实现了高度的解耦,灵活性较强,而且通过设置layoutmanager就可以轻松实现并切换布局格式。

    1.需要控制显示方式,就使用布局LayoutManager

    2.控制item的间距(或者绘制分割线),请使用itemDecoration

    3.如果需要添加item增删的动画,使用itemAnimator

    4.点击,长按事件需要自己实现


    1.Recyclerview实现Listview的效果

    <1>首先在布局文件中写一个布局文件item_recyclerview来作为Recyclerview中item的布局,代码如下:

    <?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content"> <TextView android:id="@+id/text" android:layout_width="100dp" android:layout_height="100dp" android:background="#66ff0000" android:gravity="center" android:text="1" android:textSize="30dp" /> </FrameLayout >

    <2>再写出Recyclerview的布局文件,代码如下:

    <?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="match_parent" android:orientation="vertical"> <android.support.v7.widget.RecyclerView android:id="@+id/Recycle_View" android:layout_width="match_parent" android:layout_height="match_parent"/> </LinearLayout>

    <3>创建RecyclerviewActivity,代码如下:

    package blogtest.liupei.cn.recycleviewtest; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.GridLayoutManager; import android.support.v7.widget.RecyclerView; import android.view.View; import java.util.ArrayList; import java.util.List; /** * Created by liupei on 2016/9/9. */ public class RecycleViewActivity extends AppCompatActivity { private RecyclerView mRecyclerView; private RecycleViewAdapter mAdapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_recycleview); mRecyclerView = (RecyclerView) findViewById(R.id.Recycle_View); initData(); } public void initData() { List<String> Datas = new ArrayList<String>(); for (int i = 0; i < 100; i++) { String data = i +""; Datas.add(data); } //创建线性布局管理器对象,使recycleview实现线性布局 //LinearLayoutManager mlayoutmanager = new LinearLayoutManager(this); //创建gridview布局管理器,使recycleview实现网格布局 GridLayoutManager mlayoutmanager = new GridLayoutManager(this,4); //设置为倒序即99-0 //mlayoutmanager.setReverseLayout(true); //设置为水平滑动 //mlayoutmanager.setOrientation(LinearLayoutManager.HORIZONTAL); mRecyclerView.setLayoutManager(mlayoutmanager); mAdapter = new RecycleViewAdapter(this, Datas); mAdapter.setOnItemClickListener(new RecycleViewAdapter.OnClickListener() { @Override public void onItemClick(View view, int position) { ToastUtils.setToast(RecycleViewActivity.this, "第" + position + "个item被点击了"); } }); mRecyclerView.setAdapter(mAdapter); mRecyclerView.addItemDecoration(new } }

    initData()方法为自己创建一些虚拟数据,即初始化数据,供Recyclerview显示。RecycleViewAdapter为设配器对象,主要负责将数据显示在手机屏幕的每一个item上,代码如下:

    package blogtest.liupei.cn.recycleviewtest; import android.content.Context; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import java.util.List; /** * Created by liupei on 2016/9/9. */ public class RecycleViewAdapter extends RecyclerView.Adapter<RecycleViewAdapter.ItemViewHolder>{ private Context mContext; private List<String> mDatas; private View.OnClickListener onClickListener; public RecycleViewAdapter(Context context,List<String> datas) { this.mContext = context; this.mDatas = datas; } public interface OnClickListener{ void onItemClick(View view,int position); } private OnClickListener mOnItemClickLitener; public void setOnItemClickListener(OnClickListener mOnItemClickLitener) { this.mOnItemClickLitener = mOnItemClickLitener; } @Override public ItemViewHolder onCreateViewHolder(ViewGroup parent,int viewType) { //这里是创建条目的回调函数 View view = LayoutInflater.from(mContext).inflate(R.layout.item_recycleview,parent,false); return new ItemViewHolder(view); } @Override public void onBindViewHolder(final ItemViewHolder holder, final int position) { //这里是用于绑定数据 String data = mDatas.get(position); holder.setData(data); if (mOnItemClickLitener != null) { holder.itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { mOnItemClickLitener.onItemClick(holder.itemView,position); } }); } } @Override public int getItemCount() { //这个方法用户设置条目的数量,返回值即为条目的数量 if (mDatas != null) { return mDatas.size(); } return 0; } public class ItemViewHolder extends RecyclerView.ViewHolder { private final TextView mText; public ItemViewHolder(View itemView) { super(itemView); mText = (TextView) itemView.findViewById(R.id.text); } public void setData(String data) { mText.setText(data); } } }

    recyclerview主要提供了三种方法供我们实现,onCreateViewHolder()创建条目的回调函数,根据条目的布局文件创建出view对象,并将view对象封装在一个内部类ItemViewHolder 对象中供缓存使用,提高了运行效率。onBindViewHolder()用于将对应条目的数据绑定在对应的条目上。getItemCount()获取条目的数量时使用。内部类ItemViewHolder将数据显示在textview控件上即可。

    吃饭去了,吃完再更。

    转载请注明原文地址: https://ju.6miu.com/read-1123879.html

    最新回复(0)