安卓开发——Recycleview

实验二: Recycleview基本使用

实验目标和实验内容:

1、掌握UI设计中的layout布局(约束布局)与基本控件(button、text、imageview等);
2、掌握复杂控件与adapter的使用

在使用RecyclerView时候,必须指定一个适配器Adapter和一个布局管理器LayoutManager。
我们这样思考,当我们去完成一个界面的布局时,我们要向里面传数据,怎么去传呢?全写在xml文件里显而不合适,这就是Adapter的作用。
简而言之,Adapter就是数据与ui之间的桥梁,它把数据与前端ui连接到一起,是一个展示数据的载体。
而设置布局管理器RecyclerView则是来控制Item的布局方式,横向、竖向以及瀑布流方式
例如:你想控制横向或者纵向滑动列表效果可以通过LinearLayoutManager这个类来进行控制(与GridView效果对应的是GridLayoutManager,与瀑布流对应的还StaggeredGridLayoutManager等)。也就是说RecyclerView不再拘泥于ListView的线性展示方式,它也可以实现GridView的效果等多种效果。
下面我们展示RecyclerView的基本使用方法:

recyclerView = (RecyclerView) findViewById(R.id.recyclerView);  
LinearLayoutManager layoutManager = new LinearLayoutManager(this );  
//设置布局管理器  
recyclerView.setLayoutManager(layoutManager);  
//设置为垂直布局,这也是默认的  
layoutManager.setOrientation(OrientationHelper. VERTICAL);  
//设置Adapter  
recyclerView.setAdapter(recycleAdapter);  
 //设置分隔线  
recyclerView.addItemDecoration( new DividerGridItemDecoration(this ));  
//设置增加或删除条目的动画  
recyclerView.setItemAnimator( new DefaultItemAnimator());  

接下来就开始完善之前的Demo吧
首先添加RecycleView的依赖
在build.gradle(Module:app)文件中添加如下依赖:

dependencies {      
implementation 'com.android.support:recyclerview-v7:30.0.0'    
}

复制代码
其中v7:后面的版本号与此文件下 compileSdkVersion后所跟数字相同,如下图所示

修改原有xml文件
为了实现RecyclerView,我们将初始的xml文件修改为ConstrainLayout(约束布局)并添加RecyclerView
代码如下:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/tab02_RecyclerView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:layout_constraintTop_toTopOf="parent"
        android:layout_margin="8dp"
        android:overScrollMode="never"
        android:scrollbars="none" />

将微信fragment的布局改为recycleView布局
现在需要将 RecyclerView 添加到上次的微信fragment对应的布局文件中。使用 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"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:orientation="vertical">

<!--    <TextView-->
<!--        android:layout_width="match_parent"-->
<!--        android:layout_height="match_parent"-->
<!--        android:gravity="center"-->
<!--        android:text="这是微信聊天界面"-->
<!--        android:textSize="30sp"-->
<!--        android:textStyle="bold"/>-->
    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/weixin_recycler_view"
        android:layout_width="match_parent"
        app:layout_constraintTop_toTopOf="parent"
        android:layout_height="wrap_content"/>

</LinearLayout>

在布局中添加了 weixinRecycleViewAdapter 微件之后,需要获取对象句柄,将其连接到布局管理器,并为要显示的数据附加适配器

创建适配器实现步骤如下:

  • ① 创建Adapter:创建一个继承RecyclerView.Adapter的Adapter类
  • ② 创建ViewHolder:在Adapter中创建一个继承RecyclerView.ViewHolder的静态内部类。
  • ③ 在Adapter中实现3个方法:
    onCreateViewHolder() 这个方法主要生成为每个Item
    inflater出一个View,但是该方法返回的是一个ViewHolder。该方法把View直接封装在ViewHolder中,然后我们面向的是ViewHolder这个实例,当然这个ViewHolder就是前面的那个静态内部类的实例
    2. onBindViewHolder() 这个方法主要用于适配渲染数据到View中。方法提供给你了一viewHolder而不是原来的convertView
    3. getItemCount() 这个方法就类似于BaseAdapter的getCount方法了,即总共有多少个条目。 在这里,补充一个知识点,关于RecyclerView的调用顺序总是按照:
    获取大小——>绑定布局——>加载ViewHolder类——>绑定数据
    这样一个规律的,通过这样的规律,我们就能知道是按照怎样的顺序来调用这些重载函数的了。
    代码如下:
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;

import java.util.ArrayList;
import java.util.List;

public class VerticalAdapter extends RecyclerView.Adapter<VerticalAdapter.VerticalViewHolder> {

    private Context mContext;

    private List<String> mList;

    public VerticalAdapter(List<String> list, Context context) {
        mList = list;
        mContext = context;
    }


    @NonNull
    @Override
    public VerticalAdapter.VerticalViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(this.mContext).inflate(R.layout.item02, parent, false);
        return new VerticalViewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull VerticalViewHolder holder, int position) {
        holder.tvNum.setText(position + 1 + "");
        holder.tvContent.setText(mList.get(position));
    }

    @Override
    public int getItemCount() {
        return mList == null ? 0 : mList.size();
    }

    public static class VerticalViewHolder extends RecyclerView.ViewHolder {

        TextView tvNum, tvContent;

        public VerticalViewHolder(View itemView) {
            super(itemView);
            tvNum = itemView.findViewById(R.id.item02_num);
            tvContent = itemView.findViewById(R.id.item02_content);
        }
    }
}

实验结果:(实验小结与结果截图)

在这里插入图片描述
实验小结
1.使用RecycleView开发必须初始化LinearLayoutManager:recyclerView.setLayoutManager(linearLayoutManager);
2.使用RecycleView时适配器要继承 RecyclerView.Adapter<RecyclerView.ViewHolder>,adapter中必须实现3个方法:

  • ① onCreateViewHolder 初始化要加载的布局
  • ② onBindViewHolder 来加载数据
  • ③ getItemCount 得到数据源的大小

3.和ListView一样使用RecycelView嵌套在scrollView里面的时候也会存在一些问题,recycleView嵌套在scrollview里面会不能展示数据

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值