自定义布局的RecycleView需要自己实现Adapter,ViewHolder和布局;

自定义Adapter继承RecycleView.Adapter,重写getItemCount(),onBindViewHolder()和onCreateViewHolder();

自定义ViewHolder继承于RecycleView.ViewHolder;

getItemCount()返回RecycleView中Item的个数,onBindViewHolder()主要实现数据和布局的绑定,onCreateViewHolder()加载布局;

效果:

适配器代码:

 package com.cloud.recycleviewdemo;

 import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView; import java.util.List; class RecycleViewAdapter extends RecyclerView.Adapter<RecycleViewAdapter.ItemHolder> { private List<Item> mItems; RecycleViewAdapter(List<Item> items) {
mItems = items;
} @Override
public int getItemCount() {
return mItems.size();
} @Override
public void onBindViewHolder(@NonNull ItemHolder holder, int position) {
//设置Item图片
holder.image.setImageResource(mItems.get(position).getImageResId());
//设置Item文字
holder.title.setText(mItems.get(position).getTitle());
} @NonNull
@Override
public ItemHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
return new ItemHolder(LayoutInflater
.from(parent.getContext()).inflate(R.layout.item, parent, false));
} class ItemHolder extends RecyclerView.ViewHolder { ImageView image;
TextView title; ItemHolder(View item) {
super(item);
image = item.findViewById(R.id.image_view);
title = item.findViewById(R.id.text_title);
}
}
}

Item类:

 package com.cloud.recycleviewdemo;

 class Item {

     private int mImageResId;
private String mTitle; Item(int imageResId, String title) {
mImageResId = imageResId;
mTitle = title;
} public int getImageResId() {
return mImageResId;
} public void setImageResId(int imageResId) {
mImageResId = imageResId;
} public String getTitle() {
return mTitle;
} public void setTitle(String title) {
mTitle = title;
}
}

MainActivity代码:

 package com.cloud.recycleviewdemo;

 import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.DefaultItemAnimator;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView; import java.util.ArrayList;
import java.util.List; public class MainActivity extends AppCompatActivity { private RecyclerView mRecyclerView;
private LinearLayoutManager mLinearLayoutManager;
private RecycleViewAdapter mRecycleViewAdapter; private List<Item> mData; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); bindViews();
initData();
//初始化线性布局管理器
mLinearLayoutManager = new LinearLayoutManager(this);
//设置布局管理器
mRecyclerView.setLayoutManager(mLinearLayoutManager);
mRecyclerView.setItemAnimator(new DefaultItemAnimator());
//初始化适配器
mRecycleViewAdapter = new RecycleViewAdapter(mData);
//设置适配器
mRecyclerView.setAdapter(mRecycleViewAdapter);
} private void bindViews() {
mRecyclerView = findViewById(R.id.recycle_view);
} private void initData() {
mData = new ArrayList<>();
mData.add(new Item(R.drawable.witcher, "The Witcher 3: Wild Hunt"));
mData.add(new Item(R.drawable.recore, "Recore"));
mData.add(new Item(R.drawable.origins, "Assassin's Creed Origins"));
mData.add(new Item(R.drawable.hunter, "theHunter: Call of the Wild"));
}
}

Item布局:

 <?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:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="4dp"
android:elevation="2dp"
android:background="@drawable/background_item"> <ImageView
android:id="@+id/image_view"
android:contentDescription="@null"
android:layout_width="0dp"
android:layout_height="235dp"
android:layout_margin="6dp"
tools:src="@drawable/witcher"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent" /> <TextView
android:id="@+id/text_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="18sp"
android:textColor="#000000"
android:layout_margin="6dp"
android:paddingBottom="4dp"
app:layout_constraintTop_toBottomOf="@+id/image_view"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
tools:text="The Witcher 3: Wild Hunt" /> </android.support.constraint.ConstraintLayout>

MainActivity布局:

 <?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.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="48dp"
android:background="@color/colorPrimary"
android:elevation="5dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"> <ImageView
android:contentDescription="@null"
android:layout_width="36dp"
android:layout_height="36dp"
android:src="@drawable/icon" /> <TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="@string/app_name"
android:textColor="#FFFFFF"
android:textSize="18sp" /> </android.support.v7.widget.Toolbar> <android.support.v7.widget.RecyclerView
android:id="@+id/recycle_view"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/toolbar"
app:layout_constraintVertical_bias="1.0"> </android.support.v7.widget.RecyclerView> </android.support.constraint.ConstraintLayout>

Android RecycleView 自定义Item的使用的更多相关文章

  1. [Android] Android RecycleView和ListView 自定义Adapter封装类

    在网上查看了很多对应 Android RecycleView和ListView 自定义Adapter封装类 的文章,主要存在几个问题: 一).网上代码一大抄,复制来复制去,大部分都运行不起来,或者 格 ...

  2. Android中自定义样式与View的构造函数中的第三个参数defStyle的意义

    零.序 一.自定义Style 二.在XML中为属性声明属性值 1. 在layout中定义属性 2. 设置Style 3. 通过Theme指定 三.在运行时获取属性值 1. View的第三个构造函数的第 ...

  3. Android RatingBar 自定义样式

    Android RatingBar 自定义样式 1.先定义Style: <style name="RadingStyle" parent="@android:sty ...

  4. Android之自定义标题

    我们知道我们创建的每一个Activity,系统默认为我们提供了一下黑色的标题,本篇我将带领大家接触一下如何实现自定义标题样式.相比系统为我们提供的样式,自定义标题可以满足我们唯心所欲的自定义设计,使我 ...

  5. Android Shape自定义纯色圆角按钮

    版权声明:分享技术,传播快乐.如果本博客对你有帮助,请在我的博客首页为我打赏吧! 在Android开发中,为响应美化应用中控件的效果,使用Shape定义图形效果,可以解决图片过多的问题. 首先看一下效 ...

  6. Android简单自定义圆形和水平ProgressBar

    ProgressBar简介 继承于View类,直接子类有AbsSeekBar和ContentLoadingProgressBar,其中AbsSeekBar的子类有SeekBar和RatingBar,可 ...

  7. Android中自定义Activity和Dialog的位置大小背景和透明度等demo

    1.自定义Activity显示样式 先在res/values下建colors.xml文件,写入: <?xml version="1.0" encoding="utf ...

  8. Android SeekBar自定义使用图片和颜色显示

    案例使用的图片如下:                            1.在res/drawable目录下新增一个xml风格文件,seekbar_define_style.xml ? 1 2 3 ...

  9. Android创建自定义dialog方法详解-样式去掉阴影效果

    在自定义组件时,从已有组件源码中会很大收获.就拿progressDialog来说     间接父类是dialog,想了解dialog继承结构可以去百度,或者    从构造器来说ProgressDial ...

随机推荐

  1. 【Spark调优】数据本地化与参数调优

    数据本地化对于Spark Job性能有着巨大的影响,如果数据以及要计算它的代码是在一起的,那么性能当然会非常高.但是,如果数据和计算它的代码是分开的,那么其中之一必须到另外一方的机器上.移动代码到其匹 ...

  2. Typescript 学习笔记二:数据类型

    中文网:https://www.tslang.cn/ 官网:http://www.typescriptlang.org/ 目录: Typescript 学习笔记一:介绍.安装.编译 Typescrip ...

  3. 程序性能调优工具之gprob

    1 简介改进应用程序的性能是一项非常耗时耗力的工作,但是究竟程序中是哪些函数消耗掉了大部分执行时间,这通常都不是非常明显的.GNU 编译器工具包所提供了一种剖析工具 GNU profiler(gpro ...

  4. 机器学习基石笔记:08 Noise and Error

    噪声:误标.对同一数据点的标注不一致.数据点信息不准确...... 噪声是针对整个输入空间的. 存在噪声的情况下,VC bound依旧有用: 存在噪声,就是f------>p(y|x),f是p的 ...

  5. 理解 Python 的执行方式,与字节码 bytecode 玩耍 (上)

    这里有个博客讲 Python 内部机制,已经有一些中文翻译. 可能因为我用的Python 3.5,例子跑起来有些不一样. 此外,我又查了其他一些参考资料,总结如下: Python 的执行方式 先看一个 ...

  6. Jpush极光推送的一些心得

    在集成极光推送的时候,test完全正常.部署到服务器后只发送一条推送之后推送不继续发送.经排查: 2018-06-28 10:24:26.394 [ThreadPoolTaskExecutor-4] ...

  7. c/c++本地时间获取

    在记录程序日志时,需要记录时间.如下: #include <iostream> #include <time.h> #include <windows.h> usi ...

  8. Git工具使用

    GIT(分布式版本控制系统) Git是一款免费.开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目.Git的读音为/gɪt/. Git是一个开源的分布式版本控制系统,可以有效.高速的处理从 ...

  9. vs2015+qt5.9.7配置跨平台的工程

    环境:vs2015 update 3 + qt 5.9.7 问题:代码中存在中文无法编译 附加目的:支持跨平台 问题分析:代码的编码格式导致中文编译错误,windows默认gb2312编码,qt默认u ...

  10. 【PyTorch深度学习60分钟快速入门 】Part2:Autograd自动化微分

      在PyTorch中,集中于所有神经网络的是autograd包.首先,我们简要地看一下此工具包,然后我们将训练第一个神经网络. autograd包为张量的所有操作提供了自动微分.它是一个运行式定义的 ...