美文网首页
Androidx RecyclerView(一 ): 基本使用

Androidx RecyclerView(一 ): 基本使用

作者: 中v中 | 来源:发表于2020-12-22 20:02 被阅读0次

    一、用法:
    RecyclerView和其他用于界面数据滑动展示的控件(GridView,ListView,Spinner等)一样,都少不了数据源,适配器,以及监听逻辑处理这三块。
    下面就来讲解写RecyclerView的使用方法:
    1.引用(导包)
    2.布局文件引用
    3.构造适配器
    4.主程序,包括数据源以及逻辑处理等

    上两个简单的效果图:
    StaggeredGridLayoutManager 以瀑布流方式展示Item

    image

    LinerLayoutManager 以垂直或者水平列表方式展示Item

    image

    二、贴代码时间:

    Step1:引用(导包)

    2.1 直接在build.gradle(Module:app)的dependencies添加,(依赖应该自带)

    implementation 'androidx.recyclerview:recyclerview:1.1.0'
    

    Step2:布局

    2.2 activity_main.xml

    <?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/recycler_view" android:layout_width="match_parent" android:layout_height="match_parent"/>
    
    </LinearLayout>
    

    2.3 crush_item.xml

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="5dp"
        android:orientation="horizontal">
    
        <ImageView
            android:id="@+id/crush_image"
            android:layout_width="100dp"
            android:layout_height="150dp"
            android:layout_gravity="left"
            tools:background="@drawable/image0" />
    
        <TextView
            android:id="@+id/crush_name"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="60dp"
            android:layout_marginLeft="40dp"
            tools:text="CrushText" />
    
    </LinearLayout>
    

    Step3:构造适配器

    封装 2.4 Crush.java

    package com.gatsby.recyclertest; public class Crush { private String name; private int imageId; public Crush(String name, int imageId) { this.name = name; this.imageId = imageId;
        } public String getName(){ return name;
        } public int getImageId(){ return imageId;
        }
    
    }
    

    2.5 CrushAdapter.java
    2.5.1 为RecyclerView新增适配器CrshAdapter,并让其继承于RecyclerView.Adapter,把泛型指定为CrushAdapter.ViewHolder。
    2.5.2 定义内部类ViewHolder,并继承RecyclerView.ViewHolder。传入的View参数通常是RecyclerView子项的最外层布局。
    2.5.3 CrushAdapter构造函数,用于把要展示的数据源传入,并赋予值给全局变量mCrushList
    2.5.4继承RecyclerView.Adapter必须要重写的三个方法。 onCreateViewHolder(), onBindViewHolder, getItemCoun

    图片.png
    package com.gatsby.recyclertest;
    
    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 java.util.List;
    
    public class CrushAdapter extends RecyclerView.Adapter<CrushAdapter.ViewHolder> {
    
        private List<Crush> mCrushList;
    
        static class ViewHolder extends RecyclerView.ViewHolder {
            View crushView;
            ImageView crushImage;
            TextView crushName;
    
            public ViewHolder(@NonNull View itemView) {
                super(itemView);
                crushView = itemView;
                crushImage = (ImageView) itemView.findViewById(R.id.crush_image);
                crushName = (TextView) itemView.findViewById(R.id.crush_name);
            }
    
          public void setData(Crush crush){
                crushImage.setImageResource(crush.getImageId());
                crushName.setText(crush.getName());
            }
        }
    
        public CrushAdapter(List<Crush> crushList) {
            mCrushList = crushList;
        }
    
        @NonNull
        @Override
        public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
            View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.crush_item, parent, false);
            final ViewHolder holder = new ViewHolder(view);
            holder.crushView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    int position = holder.getAdapterPosition();
                    Crush crush = mCrushList.get(position);
                    Toast.makeText(v.getContext(), "you clicked view " + crush.getName(), Toast.LENGTH_SHORT).show();
                }
            });
            holder.crushImage.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    int position = holder.getAbsoluteAdapterPosition();
                    Crush crush = mCrushList.get(position);
                    Toast.makeText(v.getContext(), "you clicked image " + crush.getName(), Toast.LENGTH_SHORT).show();
                }
            });
            return holder;
        }
    
        @Override
        public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
            Crush crush = mCrushList.get(position);
           // holder.crushImage.setImageResource(crush.getImageId());
            // holder.crushName.setText(crush.getName());
            holder.setData(crush);
        }
    
        @Override
        public int getItemCount() {
            return mCrushList.size();
        }
    
    
    }
    

    2.7 MainActivity.java

    package com.gatsby.recyclertest;
    
    import androidx.appcompat.app.AppCompatActivity;
    import androidx.recyclerview.widget.LinearLayoutManager;
    import androidx.recyclerview.widget.RecyclerView;
    import androidx.recyclerview.widget.StaggeredGridLayoutManager;
    
    import android.os.Bundle;
    
    import java.util.ArrayList;
    import java.util.List;
    import java.util.Random;
    
    public class MainActivity extends AppCompatActivity {
    
        private List<Crush> crushList = new ArrayList<Crush>();
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            initCrush();
            CrushRecyclerView();
        }
    
        private  void  CrushRecyclerView(){
            RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recycler_view);
    
            LinearLayoutManager layoutManager = new LinearLayoutManager(this);
            layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
            /*StaggeredGridLayoutManager layoutManager = new
                    StaggeredGridLayoutManager(3, StaggeredGridLayoutManager.VERTICAL);*/
            recyclerView.setLayoutManager(layoutManager);
            CrushAdapter adapter = new CrushAdapter(crushList);
            recyclerView.setAdapter(adapter);
        }
    
        private void initCrush() {
            for (int i = 0; i < 2; i++) {
                Crush image0 = new Crush("image0", R.drawable.image0);
                crushList.add(image0);
                Crush image01 = new Crush("image01", R.drawable.image01);
                crushList.add(image01);
                Crush image02 = new Crush("image02", R.drawable.image02);
                crushList.add(image02);
                Crush image03 = new Crush("image03", R.drawable.image03);
                crushList.add(image03);
                Crush image04 = new Crush("image04", R.drawable.image04);
                crushList.add(image04);
                Crush image05 = new Crush("image05", R.drawable.image05);
                crushList.add(image05);
                Crush image06 = new Crush("image06", R.drawable.image06);
                crushList.add(image06);
                Crush image07 = new Crush("image07", R.drawable.image07);
                crushList.add(image07);
                Crush image08 = new Crush("image08", R.drawable.image08);
                crushList.add(image08);
                Crush image09 = new Crush("image09", R.drawable.image09);
                crushList.add(image09);
                Crush image10 = new Crush("image10", R.drawable.image10);
                crushList.add(image10);
                Crush image11 = new Crush("image11", R.drawable.image11);
                crushList.add(image11);
                Crush image12 = new Crush("image12", R.drawable.image12);
                crushList.add(image12);
                Crush image13 = new Crush("image13", R.drawable.image13);
                crushList.add(image13);
            }
        }
    
    }
    

    相关文章

      网友评论

          本文标题:Androidx RecyclerView(一 ): 基本使用

          本文链接:https://www.haomeiwen.com/subject/dbxenktx.html