RecycleView最简教程

RecyclerView详解

这可能是RecyclerView最简单的入门程序了,本篇文章只适合Recycle入门,请轻喷

RecycleView介绍

RecycleView可以用来替代ListView以及GridView可以自定义炫酷的效果。在使用RecycleView的过程中需要了解一下四点

  • LayoutManager布局管理器控制每一个item的布局方式
  • ItemAnimator每一个Item增加与删除的动画效果
  • ItemDecoration Item之间的间隔控制
  • item点击事件,自己写,莫名喜感,哈哈哈哈哈

如果没有耐心,请直接下载代码,没有代码的教程都是耍流氓!!!

demo地址

入门阶段

在工程中引入RecycleView

implementation 'com.android.support:recyclerview-v7:27.1.0'

在MainActivity布局文件main_activity中引入 RecyclerView

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout 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">

   <android.support.v7.widget.RecyclerView
       android:id="@+id/main_activity_recycleview"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       >
   </android.support.v7.widget.RecyclerView>

</android.support.constraint.ConstraintLayout>

新建Adapter将要加载的布局文件item_recycle_view

<?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="wrap_content"
    android:orientation="horizontal"
    android:layout_margin="10dp"
    >
    <ImageView
        android:id="@+id/item_pic_iv"
        android:layout_width="120dp"
        android:layout_height="100dp"
        android:background="@mipmap/scene1"
        />

    <TextView
        android:id="@+id/item_name_tv"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical"
        android:gravity="right"
        android:layout_weight="1"
        android:text="点击"
        />

</LinearLayout>

新建RecycleViewAdapter

public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.ViewHolder>{

    private int[] pics;
    private String[] names;


    public RecyclerViewAdapter(int[] pics,String[] names){
        this.pics=pics;
        this.names=names;
    }


    @NonNull
    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        //使用此方法将不能适配父组件的布局
        // View view=View.inflate(parent.getContext(),R.layout.item_recycle_view,null);
        View view= LayoutInflater.from(parent.getContext()).inflate(R.layout.item_recycle_view,parent,false);
        ViewHolder viewHolder=new ViewHolder(view);
        return viewHolder;
    }

    //用于绑定数据
    @Override
    public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
        holder.imageView.setBackgroundResource(pics[position]);
        holder.textView.setText(names[position]);

    }

    //返回的item总数
    @Override
    public int getItemCount() {
        return pics.length;
    }

    public static class ViewHolder extends RecyclerView.ViewHolder{

        private ImageView imageView;

        private TextView textView;

        public ViewHolder(View itemView) {
            super(itemView);

            imageView=(ImageView)itemView.findViewById(R.id.item_pic_iv);
            textView=(TextView)itemView.findViewById(R.id.item_name_tv);
        }
    }
}

在MainActivity中加载RecycleView布局

public class MainActivity extends AppCompatActivity {

    private RecyclerView recyclerView;

    private RecyclerViewAdapter recycleViewAdapter;


    private int[] pics;

    private String[] names;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
    }

    private void initData(){
        pics=new int[]{R.mipmap.scene1,R.mipmap.scene01,R.mipmap.scene02,R.mipmap.scene03,R.mipmap.scene04};
        names=new String[]{"景点1","景点2","景点3","景点4","景点5"};

    }

    private void initView(){

        initData();

        recyclerView=(RecyclerView)findViewById(R.id.main_activity_recycleview);

        recyclerView.setLayoutManager(new LinearLayoutManager(this));

        recycleViewAdapter=new RecyclerViewAdapter(pics,names);

        recyclerView.setAdapter(recycleViewAdapter);


    }

}

运行结果:假装这里有图片
Demo地址

为Item添加点击事件阶段

因为RecyclerView自身没有点击事件的方法,因此需要自己编写点击事件。通过在Adapter中设置点击监听,并将接口暴露出来来实现。

基于以上的步骤,只需要修改RecyclerViewAdapter以及MainActivity中的代码即可

RecyclerViewAdapter中为每一个Item添加点击事件,同时将需要的点击事件的接口暴露给外部调用,直接贴代码

修改RecyclerAdapter中的代码

public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.ViewHolder>{

    private int[] pics;
    private String[] names;

    public OnItemClickListener onItemClickListener;


    public RecyclerViewAdapter(int[] pics,String[] names){
        this.pics=pics;
        this.names=names;
    }


    @NonNull
    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        //使用此方法将不能适配父组件的布局
        // View view=View.inflate(parent.getContext(),R.layout.item_recycle_view,null);
        View view= LayoutInflater.from(parent.getContext()).inflate(R.layout.item_recycle_view,parent,false);
        ViewHolder viewHolder=new ViewHolder(view);
        return viewHolder;
    }

    //用于绑定数据
    @Override
    public void onBindViewHolder(@NonNull ViewHolder holder, final int position) {
        holder.imageView.setBackgroundResource(pics[position]);
        holder.textView.setText(names[position]);

        //为整个item添加点击事件
//        holder.itemView.setOnClickListener(new View.OnClickListener() {
//            @Override
//            public void onClick(View v) {
//               onItemClickListener.OnItemClickListener(position,names);
//            }
//        });
        //只为item中的某一个元素添加点击事件
        holder.textView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                onItemClickListener.OnItemClickListener(position,names);
            }
        });

    }

    //返回的item总数
    @Override
    public int getItemCount() {
        return pics.length;
    }

    public static class ViewHolder extends RecyclerView.ViewHolder{

        private ImageView imageView;

        private TextView textView;

        public ViewHolder(View itemView) {
            super(itemView);

            imageView=(ImageView)itemView.findViewById(R.id.item_pic_iv);
            textView=(TextView)itemView.findViewById(R.id.item_name_tv);
        }
    }


    /**
     * 当item被点击的时进行回调
     * */

    public  interface OnItemClickListener{
        void OnItemClickListener(int pos,String[] names);
    }


    /**
    * 用于将每一次点击事件暴露到外面
    * */
    public void setOnItemClickListener(OnItemClickListener onItemClickListener){

        this.onItemClickListener=onItemClickListener;

    }
}


修改MainActivity中的代码


public class MainActivity extends AppCompatActivity implements RecyclerViewAdapter.OnItemClickListener{

    private RecyclerView recyclerView;

    private RecyclerViewAdapter recycleViewAdapter;


    private int[] pics;

    private String[] names;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
    }

    private void initData(){
        pics=new int[]{R.mipmap.scene1,R.mipmap.scene01,R.mipmap.scene02,R.mipmap.scene03,R.mipmap.scene04};
        names=new String[]{"景点1","景点2","景点3","景点4","景点5"};

    }

    private void initView(){

        initData();

        recyclerView=(RecyclerView)findViewById(R.id.main_activity_recycleview);

        recyclerView.setLayoutManager(new LinearLayoutManager(this));

        //网格布局
        //recyclerView.setLayoutManager(new GridLayoutManager(this,2));


        recycleViewAdapter=new RecyclerViewAdapter(pics,names);

        recycleViewAdapter.setOnItemClickListener(this);

        recyclerView.setAdapter(recycleViewAdapter);


    }

    @Override
    public void OnItemClickListener(int pos, String[] names) {

        Toast.makeText(this,names[pos],Toast.LENGTH_LONG).show();

    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
RecycleView 是一个用于在 Android 应用中展示大量数据的高效视图组件。它可以用于显示列表、网格或瀑布流等不同类型的布局,并支持高度的重用和回收。这个组件可以大大提高应用程序的性能,因为它只会在屏幕上显示可见项,而不是将所有数据一次性加载到内存中。 使用 RecycleView,您需要创建一个适配器(Adapter)来将数据绑定到视图上,并且可以自定义视图的外观和交互。您可以使用默认的适配器(如 ArrayAdapter)或自定义适配器来满足特定的需求。 以下是一个示例代码,演示如何使用 RecycleView 在一个简单的列表中显示一组文本项: ```java public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> { private List<String> mData; public MyAdapter(List<String> data) { mData = data; } @Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_layout, parent, false); return new ViewHolder(view); } @Override public void onBindViewHolder(ViewHolder holder, int position) { String item = mData.get(position); holder.textView.setText(item); } @Override public int getItemCount() { return mData.size(); } public static class ViewHolder extends RecyclerView.ViewHolder { public TextView textView; public ViewHolder(View itemView) { super(itemView); textView = itemView.findViewById(R.id.text_view); } } } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值