Android--RecyclerView

ListView在android中贡献卓越,但是它并不是完全没有缺点的,如果我们不使用一些技巧来提升它的运行效率,而且他不能实现横向滚动,为此RecyclerView诞生了

1.Recycler View的基本使用

由于RecyclerView属于新增的控件,为了适应所有的android的版本,我们在使用之前要在app/build.gradle文件中导入依赖包

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'androidx.appcompat:appcompat:1.1.0'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
    implementation 'androidx.recyclerview:recyclerview:1.0.0'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test:runner:1.2.0'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
    implementation 'androidx.recyclerview:recyclerview:1.0.0'
}
implementation 'androidx.recyclerview:recyclerview:1.0.0'

基本使用:
(1)在使用时必须指定一个布局管理器和一个配适器
(2) 自定义的配适器需要继承RecyclerView.Adapter

  • 将配适器中定义的ViewHolder类作为泛型
  • 自定义配适器中需要根据UI自定义View Holder类(继承RecyclerView.ViewHolder)
  • 有参构造用于传入数据
  • 重写onCreateViewHolder(),onBindViewHolder(),getItemCount()

具体实现
(1)activity_main.xml中加入控件Recycler View

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/recyclerview"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>
</LinearLayout>

(2)每个子项的布局
在res/layout中新建Layout resource file
recyclerview_item.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <ImageView
        android:id="@+id/picture"
        android:layout_width="20dp"
        android:layout_height="20dp"
        />
    <TextView
        android:id="@+id/textview"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="20dp"/>

</LinearLayout>

(3)定义实体类myDate

public class myDate{
    private String name;
    private int id;
    public myDate(String name,int id) {
        this.id = id;
        this.name = name;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }
}

(4)自定义配适器

public class myAdapter extends RecyclerView.Adapter<myAdapter.ViewHolder> {
    private List<myDate> list;
    //构造函数传入数据
    public myAdapter(List<myDate> list)  {
        this.list = list;
    }
    //定义ViewHolder类
    static public class ViewHolder extends RecyclerView.ViewHolder{
        TextView textView;
        ImageView imageView;

        public ViewHolder(@NonNull View itemView) {
            super(itemView);
            textView = itemView.findViewById(R.id.textview);
            imageView = itemView.findViewById(R.id.picture);
        }
    }
    //重写三种方法
    @NonNull
    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.recyclerview_item,parent,false);
        ViewHolder viewHolder = new ViewHolder(view);
        return viewHolder;
    }

    @Override
    public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
        myDate myDate = list.get(position);
        holder.imageView.setImageResource(myDate.getId());
        holder.textView.setText(myDate.getName());
    }

    @Override
    public int getItemCount() {
        return list.size();
    }
}

onCreateViewHolder()用于创建View Holder实例,将加载出来的布局传入到构造函数中,返回View Holder实例
onBindViewHolder()是用于对RecycleView子项的数据进行赋值,会在每个子项在屏幕中时执行
getItemCount()用于返回子项的个数
(5)指定布局管理器和配适器

private List<myDate> list = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    init();
    LinearLayoutManager layoutManager = new LinearLayoutManager(this);
    RecyclerView recyclerView = findViewById(R.id.recyclerview);
    recyclerView.setLayoutManager(layoutManager);
    myAdapter myAdapter = new myAdapter(list);
    recyclerView.setAdapter(myAdapter);

}
public List<myDate> init() {
    for(int i= 0;i < 10;i++) {
        myDate myDate = new myDate("樱桃",R.drawable.cherry);
        list.add(myDate);
        myDate myDate1 = new myDate("樱桃",R.drawable.cherry);
        list.add(myDate1);
        myDate myDate2 = new myDate("樱桃",R.drawable.cherry);
        list.add(myDate2);
        myDate myDate3 = new myDate("樱桃",R.drawable.cherry);
        list.add(myDate3);
        myDate myDate4 = new myDate("樱桃",R.drawable.cherry);
        list.add(myDate4);
        myDate myDate5 = new myDate("樱桃",R.drawable.cherry);
        list.add(myDate5);
        myDate myDate6 = new myDate("樱桃",R.drawable.cherry);
        list.add(myDate6);
    }
    return list;
}

在这里插入图片描述

2.实现横向滚动和瀑布流布局

实现横向滚动layoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);

LinearLayoutManager layoutManager = new LinearLayoutManager(this);
layoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);
RecyclerView recyclerView = findViewById(R.id.recyclerview);
recyclerView.setLayoutManager(layoutManager);
myAdapter myAdapter = new myAdapter(list);
recyclerView.setAdapter(myAdapter);

在这里插入图片描述
除了LinearLayoutManager之外,Recycler View还为我们提供了

  • GridLayoutManager 以网格方式展示
  • StaggeredGridLayoutManager 以瀑布流方式展示Item
    瀑布流
    (1)创建StaggeredGridLayoutManager实例,传入两个参数,参数一:指定布局的列数,参数二:指定布局的方向
    在这里插入图片描述
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    init();
    StaggeredGridLayoutManager staggeredGridLayoutManager = new StaggeredGridLayoutManager(3,StaggeredGridLayoutManager.VERTICAL);
    RecyclerView recyclerView = findViewById(R.id.recyclerview);
    recyclerView.setLayoutManager(staggeredGridLayoutManager);
    myAdapter myAdapter = new myAdapter(list);
    recyclerView.setAdapter(myAdapter);
}
public List<myDate> init() {
    for(int i= 0;i < 10;i++) {
        myDate myDate = new myDate("樱桃樱桃樱桃樱桃樱桃樱桃",R.drawable.cherry);
        list.add(myDate);
        myDate myDate1 = new myDate("樱桃樱桃樱桃",R.drawable.cherry);
        list.add(myDate1);
        myDate myDate2 = new myDate("樱桃樱桃",R.drawable.cherry);
        list.add(myDate2);
        myDate myDate3 = new myDate("樱桃",R.drawable.cherry);
        list.add(myDate3);
        myDate myDate4 = new myDate("樱桃",R.drawable.cherry);
        list.add(myDate4);
        myDate myDate5 = new myDate("樱桃",R.drawable.cherry);
        list.add(myDate5);
        myDate myDate6 = new myDate("樱桃",R.drawable.cherry);
        list.add(myDate6);
    }
    return list;
}

网格
在这里插入图片描述

GridLayoutManager gridLayoutManager = new GridLayoutManager(MainActivity.this,3);
RecyclerView recyclerView = findViewById(R.id.recyclerview);
recyclerView.setLayoutManager(gridLayoutManager);

两者的区别,借用两张图来表示

  • GridLayoutManager 网格
    在这里插入图片描述
  • StaggeredGridLayoutManager 瀑布流
  • 在这里插入图片描述
3.添加点击事件
public void onBindViewHolder(@NonNull final ViewHolder holder, int position) {
    final myDate myDate = list.get(position);
    holder.textView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Toast.makeText(v.getContext(),"You click" + myDate.getName(),Toast.LENGTH_SHORT ).show();
        }
    });
    holder.imageView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Toast.makeText(v.getContext(),"You click" + myDate.getName(),Toast.LENGTH_SHORT ).show();
        }
    });
    holder.imageView.setImageResource(myDate.getId());
    holder.textView.setText(myDate.getName());
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
系统根据B/S,即所谓的电脑浏览器/网络服务器方式,运用Java技术性,挑选MySQL作为后台系统。系统主要包含对客服聊天管理、字典表管理、公告信息管理、金融工具管理、金融工具收藏管理、金融工具银行卡管理、借款管理、理财产品管理、理财产品收藏管理、理财产品银行卡管理、理财银行卡信息管理、银行卡管理、存款管理、银行卡记录管理、取款管理、转账管理、用户管理、员工管理等功能模块。 文中重点介绍了银行管理的专业技术发展背景和发展状况,随后遵照软件传统式研发流程,最先挑选适用思维和语言软件开发平台,依据需求分析报告模块和设计数据库结构,再根据系统功能模块的设计制作系统功能模块图、流程表和E-R图。随后设计架构以及编写代码,并实现系统能模块。最终基本完成系统检测和功能测试。结果显示,该系统能够实现所需要的作用,工作状态没有明显缺陷。 系统登录功能是程序必不可少的功能,在登录页面必填的数据有两项,一项就是账号,另一项数据就是密码,当管理员正确填写并提交这二者数据之后,管理员就可以进入系统后台功能操作区。进入银行卡列表,管理员可以进行查看列表、模糊搜索以及相关维护等操作。用户进入系统可以查看公告和模糊搜索公告信息、也可以进行公告维护操作。理财产品管理页面,管理员可以进行查看列表、模糊搜索以及相关维护等操作。产品类型管理页面,此页面提供给管理员的功能有:新增产品类型,修改产品类型,删除产品类型。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值