IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> RecycleView和ViewPager2 -> 正文阅读

[移动开发]RecycleView和ViewPager2

目录

RecycleView

RecycleView简介

RecycleView纵向排列

首先在主布局中引入RecyclerView控件。

创建子布局,然后在子布局中,写好自己的子项布局

编写实体类

创建适配器

在主活动中使用

RecycleView横向排列

只需要在设置布局管理器的时候添加一个横向布局即可

RecycleView网格布局

RecycleView的点击事件

第一步,在适配器中的onBindViewHolder方法中给视图获取监听

第二步,在ViewHolder中设置视图

ViewPager2

ViewPager2使用步骤

首先在主布局中引入ViewPager2控件。

创建子布局,然后在子布局中,写好自己的子项布局

编写实体类

创建适配器

在主活动中使用


RecycleView

RecycleView简介

从Android 5.0开始,谷歌公司推出了一个用于大量数据展示的新控件RecylerView,可以用来代替 传统的ListView,更加强大和灵活。 RecyclerView是一个强大的滑动组件,与经典的ListView相比,同样拥有item回收复用的功能,这 一点从它的名字Recyclerview即回收view也可以看出。 RecyclerView 支持 线性布局网格布局瀑布流布局 三种,而且同时还能够控制横向还是纵向滚 动。

1.容器性质的控件

2.用于大量数据展示的新控件

RecycleView纵向排列

首先在主布局中引入RecyclerView控件。

<LinearLayout 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"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/rv_address"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</LinearLayout>

创建子布局,然后在子布局中,写好自己的子项布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:orientation="horizontal"
    android:padding="10dp"
    android:layout_height="wrap_content">
    <View
        android:layout_width="2dp"
        android:layout_height="match_parent"
        android:background="#FFFFFF" />
    <ImageView
        android:id="@+id/iv_img"
        android:layout_width="50dp"
        android:layout_height="50dp" />
    <TextView
        android:id="@+id/tv_tx"
        android:layout_width="300dp"
        android:layout_gravity="center_vertical"
        android:textSize="20dp"
        android:layout_height="wrap_content" />
</LinearLayout>

编写实体类

package com.wzk.recyclerview.model;

public class AddressBook {
    private String name;
    private int imgid;

    public AddressBook(String name, int imgid) {
        this.name = name;
        this.imgid = imgid;
    }

    public String getName() {
        return name;
    }

    public int getImgid() {
        return imgid;
    }
}

创建适配器

package com.wzk.recyclerview.adapter;

import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

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

import com.wzk.recyclerview.R;
import com.wzk.recyclerview.model.AddressBook;

import java.util.List;

public class AddressAdapter extends RecyclerView.Adapter<AddressAdapter.ViewHolder> {
    //存储有多少条数据然后在getItemCount方法里做循环
    private List<AddressBook> list;
    public AddressAdapter(List<AddressBook> list){
        this.list=list;
    }

    @NonNull
    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        //获取要展示的视图
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.addressbook_item, parent, false);
        //返回视图
        return new ViewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
        //取出list中数据写进视图中
        AddressBook addressBook = list.get(position);
        holder.iv_img.setImageResource(addressBook.getImgid());
        holder.tv_tx.setText(addressBook.getName());
        holder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Toast.makeText(view.getContext(), addressBook.getName()+"被点击", Toast.LENGTH_SHORT).show();
            }
        });
    }

    @Override
    public int getItemCount() {

        return list.size();
    }

    public class ViewHolder extends RecyclerView.ViewHolder{
        View view;
        ImageView iv_img;
        TextView tv_tx;
        public ViewHolder(@NonNull View itemView) {
            super(itemView);
            view=itemView;
            iv_img=itemView.findViewById(R.id.iv_img);
            tv_tx=itemView.findViewById(R.id.tv_tx);
        }
    }


}

在主活动中使用

package com.wzk.recyclerview;

import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import android.os.Bundle;

import com.wzk.recyclerview.adapter.AddressAdapter;
import com.wzk.recyclerview.model.AddressBook;

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

public class MainActivity extends AppCompatActivity {
    //写要填的数据
    private String[] names={"男一","男二","男三","男四","女一","女二","女三","女四"};
    private int[] imgs={R.mipmap.men,R.mipmap.men,R.mipmap.men,R.mipmap.men,R.mipmap.nv,R.mipmap.nv,R.mipmap.nv,R.mipmap.nv};
    private List<AddressBook> list=new ArrayList<>();
    private RecyclerView rv_address;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //整合数据,存进list中
        initData();
        //根据id获取控件
        rv_address=findViewById(R.id.rv_address);
        //把适配器拿出来用,把list传进适配器中
        AddressAdapter adapter=new AddressAdapter(list);
        //在设置适配器之前设置布局管理器
        LinearLayoutManager layoutManager=new LinearLayoutManager(this);
        rv_address.setLayoutManager(layoutManager);

        //给控件用适配器赋值
        rv_address.setAdapter(adapter);
    }

    private void initData() {
        for (int i = 0; i < names.length ;i++) {
            AddressBook addressBook=new AddressBook(names[i],imgs[i]);
            list.add(addressBook);
        }
    }
}

RecycleView横向排列

只需要在设置布局管理器的时候添加一个横向布局即可

        //在设置适配器之前设置布局管理器
        LinearLayoutManager layoutManager=new LinearLayoutManager(this);
        layoutManager.setOrientation(RecyclerView.HORIZONTAL);

RecycleView网格布局

将布局管理器设置为GridLayoutManager

        //根据id获取控件
        rv_address=findViewById(R.id.rv_address);
        //把适配器拿出来用,把list传进适配器中
        AddressAdapter adapter=new AddressAdapter(list);
        //在设置适配器之前设置布局管理器
        GridLayoutManager layoutManager=new GridLayoutManager(this,3);
        rv_address.setLayoutManager(layoutManager);

        //给控件用适配器赋值
        rv_address.setAdapter(adapter);

RecycleView的点击事件

RecyclerView的点击事件比ListView的点击事件更精确。 假如我是用的是ListView,那么我点击子项的时候,无论我点击图片还是文字,他都只知道,我点击了 子项。但是如果使用的是RecyclerView,他就可以准确地判断出我点击了文字还是图片! 修改代码其实也很简单,只用修改适配器里的代码。主要是给最外层布局和图片加了点击事件,所以点 击图片的时候会有Toast,点击文字的时候因为没有给文字注册点击事件,所以会被最外层布局捕捉到, 相当于点击了最外层布局。

第一步,在适配器中的onBindViewHolder方法中给视图获取监听

        holder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Toast.makeText(view.getContext(), addressBook.getName()+"被点击", Toast.LENGTH_SHORT).show();
            }
        });

第二步,在ViewHolder中设置视图

    public class ViewHolder extends RecyclerView.ViewHolder{
        View view;
        ImageView iv_img;
        TextView tv_tx;
        public ViewHolder(@NonNull View itemView) {
            super(itemView);
            view=itemView;
            iv_img=itemView.findViewById(R.id.iv_img);
            tv_tx=itemView.findViewById(R.id.tv_tx);
        }
    }

ViewPager2

ViewPager2继承于RecycleView

ViewPager2使用步骤

首先在主布局中引入ViewPager2控件。

    <androidx.viewpager2.widget.ViewPager2
        android:id="@+id/vp_swi"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

创建子布局,然后在子布局中,写好自己的子项布局

<RelativeLayout 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:id="@+id/lay_rl"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity2">
    <TextView
        android:id="@+id/tv_text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="666"/>
</RelativeLayout>

编写实体类

public class Swiper {
    private int scolor;
    private String title;

    public Swiper(int scolor, String title) {
        this.scolor = scolor;
        this.title = title;
    }

    public int getScolor() {
        return scolor;
    }

    public String getTitle() {
        return title;
    }
}

创建适配器

public class SwiperAdapter extends RecyclerView.Adapter<SwiperAdapter.ViewHolder> {
    private List<Swiper> list;

    public SwiperAdapter(List<Swiper> list) {
        this.list = list;

    }

    @NonNull
    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View inflate = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_swiper, parent, false);
        ViewHolder viewHolder = new ViewHolder(inflate);
        return viewHolder;
    }

    @Override
    public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
        int i=position%4;
        Swiper swiper = list.get(i);
        holder.lay_rl.setBackgroundColor(swiper.getScolor());
        holder.tv_text.setText(swiper.getTitle());
    }

    @Override
    public int getItemCount() {
        return Integer.MAX_VALUE;
    }

    public class ViewHolder extends RecyclerView.ViewHolder{
        RelativeLayout lay_rl;
        TextView tv_text;
        public ViewHolder(@NonNull View itemView) {
            super(itemView);
            lay_rl=itemView.findViewById(R.id.lay_rl);
            tv_text=itemView.findViewById(R.id.tv_text);
        }
    }
}

在主活动中使用

因为ViewPager2是横向滑动排序的,所以不用添加布局管理器

public class MainActivity2 extends AppCompatActivity {
    ViewPager2 vp_swi;
    private List<Swiper> colors=new ArrayList<>();
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);
        //整合数据
        initColors();
        //根据控件获取id
        vp_swi=findViewById(R.id.vp_swi);
        //适配器
        SwiperAdapter viewPagerAdapter = new SwiperAdapter(colors);
        //给控件添加适配器
        vp_swi.setAdapter(viewPagerAdapter);
    }

    private void initColors() {
        Swiper swiper=new Swiper(Color.BLUE,"666");
        colors.add(swiper);
        Swiper swiper2=new Swiper(Color.RED,"777");
        colors.add(swiper2);
        Swiper swiper3=new Swiper(Color.GREEN,"888");
        colors.add(swiper3);
        Swiper swiper4=new Swiper(Color.YELLOW,"888");
        colors.add(swiper4);
    }
}

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-08-06 10:55:38  更:2022-08-06 10:56:49 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 4:42:00-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码