RecycleView,Viewpager2

这篇博客详细介绍了如何在Android中使用RecyclerView,包括其支持的线性、网格和瀑布流布局,并提供了五个步骤来指导实现。同时,文章也讨论了ViewPager2,指出它是基于RecyclerView实现的,同样给出了实现一屏多页效果的步骤。

 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);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值