RecycleView
一个用于大量数据展示的新控件RecylerView
RecyclerView 支持 线性布局、网格布局、瀑布流布局 三种
第一步:布局
引入RecyclerView控件。
<?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"
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/rv_demo"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
第二步:创建子布局,在子布局中,写自己的子项布局
<?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="70dp"
android:background="#3EA89E"
>
<ImageView
android:id="@+id/iv_a"
android:layout_width="70dp"
android:layout_height="70dp"
android:src="@mipmap/a"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="abc"
android:textSize="20sp"
android:textColor="#963FA5"
android:layout_gravity="center_vertical"
android:id="@+id/tv_a"/>
</LinearLayout>
第三步:编写实体类
public class UserInfo {
public String name;
public int imgId;
public UserInfo(String name, int imgId) {
this.name = name;
this.imgId = imgId;
}
public String getName() {
return name;
}
public int getImgId() {
return imgId;
}
}
第四步:创建适配器
public class UserinfoAdapter extends RecyclerView.Adapter<UserinfoAdapter.ViewHolder> {
private List<UserInfo> list;
public UserinfoAdapter(List<UserInfo> list){
this.list=list;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view=LayoutInflater.from(parent.getContext()).inflate(R.layout.recycle,parent,false);
ViewHolder viewHolder=new ViewHolder(view);
return viewHolder;
}
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
UserInfo userInfo=list.get(position);
holder.iv_a.setImageResource(userInfo.getImgId());
holder.iv_a.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(view.getContext(),userInfo.getImgId()+"被点击",Toast.LENGTH_SHORT).show();
}
});
holder.tv_a.setText(userInfo.getName());
holder.view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(view.getContext(),userInfo.getName(),Toast.LENGTH_SHORT).show();
}
});
}
@Override
public int getItemCount() {
return list.size();
}
public class ViewHolder extends RecyclerView.ViewHolder {
View view;
ImageView iv_a;
TextView tv_a;
public ViewHolder(@NonNull View itemView) {
super(itemView);
view=itemView;
iv_a=itemView.findViewById(R.id.iv_a);
tv_a=itemView.findViewById(R.id.tv_a);
}
}
}
第五步::在主活动中使用
public class MainActivity extends AppCompatActivity {
int[] imgs={R.mipmap.a,R.mipmap.b,R.mipmap.c,R.mipmap.d,R.mipmap.e,R.mipmap.f,R.mipmap.g,R.mipmap.h,R.mipmap.i,R.mipmap.jinbipixel};
String[] names={"a","b","c","d","e","f","g","h","i","j",};
List<UserInfo> list=new ArrayList<>();
RecyclerView rv_demo;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initData();
rv_demo=findViewById(R.id.rv_demo);
UserinfoAdapter adapter=new UserinfoAdapter(list);
GridLayoutManager layoutManager=new GridLayoutManager(this,4);
rv_demo.addItemDecoration(new DividerItemDecoration(this, LinearLayoutManager.HORIZONTAL));
rv_demo.addItemDecoration(new DividerItemDecoration(this, LinearLayoutManager.VERTICAL));
rv_demo.setLayoutManager(layoutManager);
rv_demo.setAdapter(adapter);
}
private void initData() {
for (int i = 0; i < names.length; i++) {
UserInfo userInfo=new UserInfo(names[i],imgs[i]);
list.add(userInfo);
}
}
}
RecycleView横向排列
LinearLayoutManager layoutManager = new LinearLayoutManager(this);
layoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);
RecycleView网格排列
GridLayoutManager gridLayoutManager = new GridLayoutManager(this,3);
recyclerView.setLayoutManager(gridLayoutManager);
Viewpager2
ViewPager2 是基于 RecyclerView 实现的
1. 布局
<?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"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity3"
>
<androidx.viewpager2.widget.ViewPager2
android:layout_width="match_parent"
android:layout_height="200dp"
android:id="@+id/vp_1"/>
</LinearLayout>
2. 创建子布局,
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/re_1">
<TextView
android:layout_centerInParent="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/tv_lunbo"/>
</RelativeLayout>
3.编写实体类
public class Scolor {
public int scolor;
public String name;
public Scolor(int scolor, String name) {
this.scolor = scolor;
this.name = name;
}
public int getScolor() {
return scolor;
}
public String getName() {
return name;
}
}
4. 创建适配器
public class ScolorAdapter extends RecyclerView.Adapter<ScolorAdapter.ViewHolder> {
private List<Scolor> list;
public ScolorAdapter(List<Scolor> list){
this.list=list;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view= LayoutInflater.from(parent.getContext()).inflate(R.layout.viewpager,parent,false);
ViewHolder viewHolder=new ViewHolder(view);
return viewHolder;
}
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
Scolor scolor=list.get(position);
holder.re_1.setBackgroundColor(scolor.getScolor());
holder.tv_lunbo.setText(scolor.getName());
}
@Override
public int getItemCount() {
return list.size();
}
public class ViewHolder extends RecyclerView.ViewHolder {
RelativeLayout re_1;
TextView tv_lunbo;
public ViewHolder(@NonNull View itemView) {
super(itemView);
re_1=itemView.findViewById(R.id.re_1);
tv_lunbo=itemView.findViewById(R.id.tv_lunbo);
}
}
}
5.在主活动中使用
public class MainActivity3 extends AppCompatActivity {
ViewPager2 vp_1;
List<Scolor> list=new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main3);
vp_1=findViewById(R.id.vp_1);
initDate();
ScolorAdapter scolorAdapter=new ScolorAdapter(list);
vp_1.setAdapter(scolorAdapter);
}
private void initDate() {
Scolor scolor=new Scolor(Color.RED,"红色");
list.add(scolor);
Scolor scolor1=new Scolor(Color.BLUE,"蓝色");
list.add(scolor1);
Scolor scolor2=new Scolor(Color.BLACK,"黑色");
list.add(scolor2);
Scolor scolor3=new Scolor(Color.YELLOW,"黄色");
list.add(scolor3);
}
}
实现一屏多页效果:
//预加载页面数量
vp_1.setOffscreenPageLimit(1);
//一屏多页
View recyclerView = vp_1.getChildAt(0);
if(recyclerView != null && recyclerView instanceof RecyclerView){
recyclerView.setPadding(100, 0, 100, 0);
((RecyclerView) recyclerView).setClipToPadding(false);
}
这篇博客详细介绍了如何在Android中使用RecyclerView,包括其支持的线性、网格和瀑布流布局,并提供了五个步骤来指导实现。同时,文章也讨论了ViewPager2,指出它是基于RecyclerView实现的,同样给出了实现一屏多页效果的步骤。
2327

被折叠的 条评论
为什么被折叠?



