满堂花醉三千客,一剑霜寒十四州。这篇文章主要讲述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 {privateString name; private int imageId; public Crush(String name, int imageId) { this.name = name; this.imageId = imageId; }public String getName(){ returnname; }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的长度 |
【Androidx 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(); }privatevoidCrushRecyclerView(){ 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); } }}
推荐阅读
- uni-app点击事件传参与vue区别
- YARN调度架构中的AppMaster
- web测试与app测试的区别
- CSAPP:BOMB LAB
- Android GraphicBuffer-Fence
- Android应用中如何创建并使用Surface
- android surface to bitmap
- app专项测试(app弱网测试)
- app专项测试(app弱网测试(网络测试流程))