Androidx RecyclerView(一 ): 基本使用

一、用法:
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);
        }
    }

}

0人点赞

android



作者:中v中
链接:https://www.jianshu.com/p/ffbce70cc670
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值