zoukankan      html  css  js  c++  java
  • Androidx RecyclerView(一 ): 基本使用

    _iamjerry  https://www.jianshu.com/p/b4bb52cdbeb7

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

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

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

     

    二、贴代码时间: 

    Step1:引用(导包)

    2.1 直接在build.gradle(Module:app)的dependencies添加

    implementation 'androidx.recyclerview:recyclerview:1.2.0-alpha03'

     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

    方法 作用
    onCreateViewHolder() 用于创建ViewHolder实例。这个方法将子项布局crush_item 加载进来并传入ViewHolder的构造函数,最后返回ViewHolder对象
    onBindViewHolder()  此方法用于对子项的数据进行赋值,在每个子项滚动到屏幕内的时候执行
    getItemCount()    用于返回RecyclerView的长度


      


     |

    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 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());
        }
    
        @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);
            }
        }
    
    }
     
  • 相关阅读:
    翻String.Format源码发现的新东西:StringBuilderCache
    禁止Asp.Net WebService 的Test页面功能
    利用XML序列化和Asp.Net Web缓存实现站点配置文件
    使用.NET配置文件appSettings元素的File属性
    <probing> 元素指定扩展Asp.Net加载程序集位置
    Windbg .net内存调试有用的命令(笔记 )
    The Dangers of the Large Object Heap(转载,LOH内存碎片情景重现)
    Advanced .NET Debugging: Managed Heap and Garbage Collection(转载,托管堆查内存碎片问题解决思路)
    调试.NET程序OutOfMemoryException (转载)
    mysql数据库之索引和分析索引
  • 原文地址:https://www.cnblogs.com/crushgirl/p/12952369.html
Copyright © 2011-2022 走看看