当前位置:网站首页>RecycleView和ViewPager2
RecycleView和ViewPager2
2022-08-05 05:15:00 【suiyue010211】
目录
第一步,在适配器中的onBindViewHolder方法中给视图获取监听
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);
}
}边栏推荐
猜你喜欢

第四讲 back propagation 反向传播

Lecture 2 Linear Model Linear Model

Mesos learning

Calling Matlab configuration in pycharm: No module named 'matlab.engine'; 'matlab' is not a package

【NFT网站】教你制作开发NFT预售网站官网Mint作品

怎么更改el-table-column的边框线
![[Go through 4] 09-10_Classic network analysis](/img/f2/e6e71869b8ab014cc1eea0537fc2e7.png)
[Go through 4] 09-10_Classic network analysis

关于基于若依框架的路由跳转

Flink Broadcast 广播变量

位运算符与逻辑运算符的区别
随机推荐
通过Flink-Sql将Kafka数据写入HDFS
【Over 16】Looking back at July
【过一下7】全连接神经网络视频第一节的笔记
[Skill] Long-term update
es6迭代协议
SQL(二) —— join窗口函数视图
学习总结week3_4类与对象
如何停止flink job
有用番茄来监督自己的同道中人吗?加一下我的自习室,一起加油
Flink EventTime和Watermarks案例分析
The difference between the operators and logical operators
Flink HA配置
【零基础开发NFT智能合约】如何使用工具自动生成NFT智能合约带白名单可Mint无需写代码
软件设计 实验四 桥接模式实验
Day1:用原生JS把你的设备变成一台架子鼓!
npm搭建本地服务器,直接运行build后的目录
Lecture 4 Backpropagation Essays
vscode+pytorch使用经验记录(个人记录+不定时更新)
周末作业-循环练习题(2)
学习总结week3_2函数进阶