Android滚动组件RecyclerView 的用法

RecyclerView属于新增控件,为了让RecyclerView在所有Android版本都能使用,所以Android团队将RecyclerView定义在了support库中,因此,想要使用RecyclerView控件,需要在build.gradle中添加相应的依赖库

implementation 'com.android.support:recyclerview-v7:26.1.0'

或者也可以直接引入support:design这个依赖,这个包括Recycler

implementation 'com.android.support:design:26.1.0'
dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'com.android.support:appcompat-v7:26.1.0'
    implementation 'com.android.support.constraint:constraint-layout:1.1.3'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
//    implementation 'com.android.support:recyclerview-v7:26.1.0'
    implementation 'com.android.support:design:26.1.0'
}

在布局中通过这个加入RecyclerView控件

    <android.support.v7.widget.RecyclerView
        android:id="@+id/act_test_rv"
        android:scrollbars="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent">


    </android.support.v7.widget.RecyclerView>

RecyclerView需要一些常用的方法,具体方法如下:

◆ setLayoutManager:设置列表项的布局管理器,

LinearLayoutManager为线性布局管理器、GridLayoutManager为网格布局管理器、StaggeredGridLayoutManager为瀑布流网格布局管理器。

◆ setItemAnimator:设置列表项增加或者是删除时的动画,可以使用关键字new创建 DefaultItemAnimator()对象实现系统默认的动画效果。

◆ addItemDecoration:添加列表项分割线。

◆ addOnItemTouchListener:添加列表项的触摸监听器。

◆ removeOnItemTouchListener:移除列表项的触摸监听器。

◆ setAdapter:设置列表项的适配器,使用RecyclerView.Adapter。

RecyclerView.Adapter是为RecyclerView所单独设计的适配器类,RecyclerView.Adapter的相关方法如下:

◆ getItemCount:获取列表项的数目。

◆ onBindViewHolder:绑定列表项中所显示的数据。

◆ onCreateViewHolder:在该方法中可以加载列表item(子项)中的布局文件。


在onCreate方法中设置布局管理器

 private RecyclerView recyclerView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_recycler);
        recyclerView = findViewById(R.id.act_recyclerView);
        //设置为线性布局管理器
//      上面的LinearLayoutManager有三个参数:
//     (1) Context   (2)方向,下面是垂直方向,还可以选择水平方向LinearLayoutManager.HORIZONTAL
//     (3)是否颠倒循序,这个是针对数据源的,就是把你传进去的数据进行倒着显示,
//      比如你传进去的集合是{1,2,3,4},那么这个参数为false的时候,显示的是1,2,3,4,
//      但是如果你选择的是true,显示的是4,3,2,1。
//      效果跟listView差不多
        recyclerView.setLayoutManager(new LinearLayoutManager(RecyclerActivity.this
                , LinearLayoutManager.VERTICAL, false));

//        网格布局管理器(GridLayoutManager),这个布局管理器有两个参数:
//        (1)Context  (2)显示多少列
//        这种是比较常见和常用的布局管理器,把数据整整齐齐的想网格一样的把数据显示出来。
//        recyclerView.setLayoutManager(new GridLayoutManager(this, 3));


//        瀑布流布局管理器(StaggeredLayouManager):
//        有两个参数:
//        (1)Context  (2)显示列数
//        这个一般是用来显示那些item高度不一的布局的
//        recyclerView.setLayoutManager(new StaggeredGridLayoutManager(2, 
//        StaggeredGridLayoutManager.VERTICAL));

    }

新建一个Student类,其中属性有id和name,添加构造函数和Getter and Setter

这里就不放Student 的代码了

创建一个item所需的布局layout_student_item.xml,这里就简单写了两个TextView

        <TextView
        android:id="@+id/item_student_id_tv"
        android:layout_width="0dp"
        android:layout_height="wrap_content" 
        android:layout_weight="1"
        android:gravity="center"
        android:text="id"
        />

 

下一步,新建一个适配器,并继承 android.support.v7.widget.RecyclerView.Adapter,

并自动实现其中的三个方法

76e7c6758501bb5767e411fcee9fbfee5ab.jpg

StduentAdapter中的代码如下:

    public class LinearAdapter extends RecyclerView.Adapter<LinearAdapter.LinearViewHolder> {
    private Context mContext;
    private List mList;

    public LinearAdapter(Context mContext, List mList) {
        this.mContext = mContext;
        this.mList = mList;
    }

    //创建
    @Override
    public LinearViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        //在这里设置布局管理器
        return new LinearViewHolder(LayoutInflater.from(mContext)
        .inflate(R.layout.layout_student_item,parent,false));
    }

    @Override
    public void onBindViewHolder(LinearViewHolder holder, int position) {
        //将条目信息设置上
        Student stu = (Student) mList.get(position);
        holder.idTv.setText(""+stu.getId());
        holder.nameTv.setText(stu.getName());

    }

    @Override
    public int getItemCount() {
        //设置条目的长度
        return mList.size();
    }

    //创建一个LinearViewHolder类,
    // 然后在RecyclerView.Adapter中添加泛型LinearAdapter.LinearViewHolder
    class LinearViewHolder extends RecyclerView.ViewHolder {


        private final TextView idTv;
        private final TextView nameTv;

        public LinearViewHolder(View itemView) {
            super(itemView);
            //声明布局里的控件
            idTv = itemView.findViewById(R.id.item_student_id_tv);
            nameTv = itemView.findViewById(R.id.item_student_name_tv);
        }
    }
}

最后在RecyclerActivity中添加如下代码

        //创建一个集合用于存储对象
        List ls = new ArrayList();
        //这里测试,先循环插入一些数据
        for (int i = 1; i <= 10000; i++) {
            ls.add(new Student(i, "student"));
        }
        recyclerView.setAdapter(new LinearAdapter(this,ls));

这样列表基本功能就完成了,可是和ListView相比,少了条目分割线

RecyclerView可以自定义分割线,可以参照我的另一篇博客

RecyclerView列表调用addItemDecoration实现添加自定义分割线

转载于:https://my.oschina.net/lanyu96/blog/2874370

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android横向无限循环滚动组件通常是指可以在横向方向上无限循环滚动的控件,常见的例子是轮播图组件。使用这样的组件可以实现在一组图片或其他视图之间平滑无缝地进行循环滚动显示。 在Android开发中,我们可以使用RecyclerView和ViewPager来实现这样的横向无限循环滚动组件。 使用RecyclerView来实现横向无限循环滚动组件的步骤如下: 1. 在布局文件中添加一个RecyclerView控件。 2. 创建一个RecyclerViewAdapter来管理数据和视图的显示。 3. 在RecyclerViewAdapter中实现循环滚动的逻辑,即在获取数据数量时设置为一个较大的数值,同时在对应位置获取数据时使用取余操作来实现循环滚动的效果。 4. 将RecyclerViewAdapter设置给RecyclerView控件。 使用ViewPager来实现横向无限循环滚动组件的步骤如下: 1. 在布局文件中添加一个ViewPager控件。 2. 创建一个PagerAdapter来管理数据和视图的显示。 3. 在PagerAdapter中实现循环滚动的逻辑,即在获取数据数量时设置为一个较大的数值,同时在对应位置获取数据时使用取余操作来实现循环滚动的效果。 4. 将PagerAdapter设置给ViewPager控件。 需要注意的是,在实现循环滚动效果时,需要根据具体的需求设置相应的滚动动画和手势操作等。另外,如果使用RecyclerView进行实现,还可以通过自定义LayoutManager来实现更加灵活的布局管理。总之,通过以上方法,我们可以实现Android横向无限循环滚动组件的功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值