Android RecycleView自定义布局的使用

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

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

自定义ViewHolder继承于RecycleView.ViewHolder;

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

效果:

适配器代码:

 1 package com.cloud.recycleviewdemo;
 2
 3 import android.support.annotation.NonNull;
 4 import android.support.v7.widget.RecyclerView;
 5 import android.view.LayoutInflater;
 6 import android.view.View;
 7 import android.view.ViewGroup;
 8 import android.widget.ImageView;
 9 import android.widget.TextView;
10
11 import java.util.List;
12
13 class RecycleViewAdapter extends RecyclerView.Adapter<RecycleViewAdapter.ItemHolder> {
14
15     private List<Item> mItems;
16
17     RecycleViewAdapter(List<Item> items) {
18         mItems = items;
19     }
20
21     @Override
22     public int getItemCount() {
23         return mItems.size();
24     }
25
26     @Override
27     public void onBindViewHolder(@NonNull ItemHolder holder, int position) {
28         //设置Item图片
29         holder.image.setImageResource(mItems.get(position).getImageResId());
30         //设置Item文字
31         holder.title.setText(mItems.get(position).getTitle());
32     }
33
34     @NonNull
35     @Override
36     public ItemHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
37         return new ItemHolder(LayoutInflater
38                 .from(parent.getContext()).inflate(R.layout.item, parent, false));
39     }
40
41     class ItemHolder extends RecyclerView.ViewHolder {
42
43         ImageView image;
44         TextView title;
45
46         ItemHolder(View item) {
47             super(item);
48             image = item.findViewById(R.id.image_view);
49             title = item.findViewById(R.id.text_title);
50         }
51     }
52 }

Item类:

 1 package com.cloud.recycleviewdemo;
 2
 3 class Item {
 4
 5     private int mImageResId;
 6     private String mTitle;
 7
 8     Item(int imageResId, String title) {
 9         mImageResId = imageResId;
10         mTitle = title;
11     }
12
13     public int getImageResId() {
14         return mImageResId;
15     }
16
17     public void setImageResId(int imageResId) {
18         mImageResId = imageResId;
19     }
20
21     public String getTitle() {
22         return mTitle;
23     }
24
25     public void setTitle(String title) {
26         mTitle = title;
27     }
28 }

MainActivity代码:

 1 package com.cloud.recycleviewdemo;
 2
 3 import android.support.v7.app.AppCompatActivity;
 4 import android.os.Bundle;
 5 import android.support.v7.widget.DefaultItemAnimator;
 6 import android.support.v7.widget.LinearLayoutManager;
 7 import android.support.v7.widget.RecyclerView;
 8
 9 import java.util.ArrayList;
10 import java.util.List;
11
12 public class MainActivity extends AppCompatActivity {
13
14     private RecyclerView mRecyclerView;
15     private LinearLayoutManager mLinearLayoutManager;
16     private RecycleViewAdapter mRecycleViewAdapter;
17
18     private List<Item> mData;
19
20     @Override
21     protected void onCreate(Bundle savedInstanceState) {
22         super.onCreate(savedInstanceState);
23         setContentView(R.layout.activity_main);
24
25         bindViews();
26         initData();
27         //初始化线性布局管理器
28         mLinearLayoutManager = new LinearLayoutManager(this);
29         //设置布局管理器
30         mRecyclerView.setLayoutManager(mLinearLayoutManager);
31         mRecyclerView.setItemAnimator(new DefaultItemAnimator());
32         //初始化适配器
33         mRecycleViewAdapter = new RecycleViewAdapter(mData);
34         //设置适配器
35         mRecyclerView.setAdapter(mRecycleViewAdapter);
36     }
37
38     private void bindViews() {
39         mRecyclerView = findViewById(R.id.recycle_view);
40     }
41
42     private void initData() {
43         mData = new ArrayList<>();
44         mData.add(new Item(R.drawable.witcher, "The Witcher 3: Wild Hunt"));
45         mData.add(new Item(R.drawable.recore, "Recore"));
46         mData.add(new Item(R.drawable.origins, "Assassin‘s Creed Origins"));
47         mData.add(new Item(R.drawable.hunter, "theHunter: Call of the Wild"));
48     }
49 }

Item布局:

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <android.support.constraint.ConstraintLayout
 3     xmlns:android="http://schemas.android.com/apk/res/android"
 4     xmlns:app="http://schemas.android.com/apk/res-auto"
 5     xmlns:tools="http://schemas.android.com/tools"
 6     android:orientation="vertical"
 7     android:layout_width="match_parent"
 8     android:layout_height="wrap_content"
 9     android:layout_margin="4dp"
10     android:elevation="2dp"
11     android:background="@drawable/background_item">
12
13     <ImageView
14         android:id="@+id/image_view"
15         android:contentDescription="@null"
16         android:layout_width="0dp"
17         android:layout_height="235dp"
18         android:layout_margin="6dp"
19         tools:src="@drawable/witcher"
20         app:layout_constraintTop_toTopOf="parent"
21         app:layout_constraintStart_toStartOf="parent"
22         app:layout_constraintEnd_toEndOf="parent" />
23
24     <TextView
25         android:id="@+id/text_title"
26         android:layout_width="wrap_content"
27         android:layout_height="wrap_content"
28         android:textSize="18sp"
29         android:textColor="#000000"
30         android:layout_margin="6dp"
31         android:paddingBottom="4dp"
32         app:layout_constraintTop_toBottomOf="@+id/image_view"
33         app:layout_constraintStart_toStartOf="parent"
34         app:layout_constraintBottom_toBottomOf="parent"
35         tools:text="The Witcher 3: Wild Hunt" />
36
37 </android.support.constraint.ConstraintLayout>

MainActivity布局:

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     xmlns:app="http://schemas.android.com/apk/res-auto"
 4     xmlns:tools="http://schemas.android.com/tools"
 5     android:layout_width="match_parent"
 6     android:layout_height="match_parent"
 7     tools:context=".MainActivity">
 8
 9     <android.support.v7.widget.Toolbar
10         android:id="@+id/toolbar"
11         android:layout_width="match_parent"
12         android:layout_height="48dp"
13         android:background="@color/colorPrimary"
14         android:elevation="5dp"
15         app:layout_constraintEnd_toEndOf="parent"
16         app:layout_constraintStart_toStartOf="parent"
17         app:layout_constraintTop_toTopOf="parent">
18
19         <ImageView
20             android:contentDescription="@null"
21             android:layout_width="36dp"
22             android:layout_height="36dp"
23             android:src="@drawable/icon" />
24
25         <TextView
26             android:layout_width="wrap_content"
27             android:layout_height="wrap_content"
28             android:layout_gravity="center"
29             android:text="@string/app_name"
30             android:textColor="#FFFFFF"
31             android:textSize="18sp" />
32
33     </android.support.v7.widget.Toolbar>
34
35     <android.support.v7.widget.RecyclerView
36         android:id="@+id/recycle_view"
37         android:layout_width="0dp"
38         android:layout_height="0dp"
39         app:layout_constraintBottom_toBottomOf="parent"
40         app:layout_constraintEnd_toEndOf="parent"
41         app:layout_constraintStart_toStartOf="parent"
42         app:layout_constraintTop_toBottomOf="@+id/toolbar"
43         app:layout_constraintVertical_bias="1.0">
44
45     </android.support.v7.widget.RecyclerView>
46
47 </android.support.constraint.ConstraintLayout>

原文地址:https://www.cnblogs.com/cloudfloating/p/9193801.html

时间: 2024-10-04 17:22:57

Android RecycleView自定义布局的使用的相关文章

深入解析Android的自定义布局

原文链接:http://greenrobot.me/devpost/android-custom-layout/ 写在前面的话: 这篇文章是前Firefox Android工程师(现在跳槽去Facebook了)Lucas Rocha所写,文中对Android中常用的四种自定义布局方案进行了很好地分析,并结合这四种Android自定义布局方案所写的示例项目讲解了它们各自的优劣以及四种方案之间的比较.看完这篇文章,也让我对Android 自定义布局有了进一步的了解,于是趁着兴头,我把它翻译成中文,原

【转】Android AlertDialog自定义布局

原文网址:https://blog.csdn.net/u010694658/article/details/53022294 由于开发中经常使用弹框,然而系统自带的弹框太局限,也不太美观,经常不能满足开发需求,所以就只能自定义布局.其实自定义布局很简单,没不要写出来,但是如果不写一遍的,后面遇到的话就感觉又会忘记,所以在次记一小笔,仅记一个最简单的例子,可以举一反三.  直接上代码 public class MainActivity extends Activity implements OnC

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

在网上查看了很多对应 Android RecycleView和ListView 自定义Adapter封装类 的文章,主要存在几个问题: 一).网上代码一大抄,复制来复制去,大部分都运行不起来,或者 格式错乱 二).剩下的那些能运行起来的,将Adapter类.ViewHolder类,放在不同文件里,导致文件多.杂 于是总结这两个单独的Custom***ViewAdapter 类,以方便调用! 一.RecycleView Adapter自定义封装类 CustomRecyclerViewAdapter

Android开发学习之路--UI之自定义布局和控件

新的一年已经开始了,今天已经是初二了,两天没有学习了,还是要来继续学习下.一般手机的title都是actionbar,就像iphone一样可以后退,可以编辑.这里自定义布局就来实现下这个功能,首先准备下三张图片,一张用来当作背景,两张分别表示后退和编辑.新建工程UICostomViewsTest,然后自动创建工程后,新建title.xml,编写代码如下: <?xml version="1.0" encoding="utf-8"?> <LinearL

Android:创建可穿戴应用 - 自定义布局

创建自定义布局(Creating Custom Layouts) 本文将介绍如何创建自定义通知以及使用可穿戴UI库来创建自定义布局你同时还需要了解可穿戴设计准则(Wear Design Principles)除了屏幕尺寸和瞬读能力(Glance ability)外,为可穿戴应用创建布局大体和普通手机一样. 创建自定义通知(Custom Notifications) 通常,你应该在手机应用上创建通知然后自动同步到可穿戴应用.这让你只需要构建通知一次,就可以呈现于多种设备(不只是可穿戴,最终还包括汽

Android自定义布局

1.首先新建属性文件 <?xml version="1.0" encoding="utf-8"?> <resources> <declare-styleable name="topbar"> <attr name="title" format="string"/> <attr name="titleTextSize" format=&

Android自定义布局的三种实现方式

在毕设项目中多处用到自定义布局,一直打算总结一下自定义布局的实现方式,今天就来总结一下吧.在此之前学习了郭霖大神博客上面关于自定义View的几篇博文,感觉受益良多,本文中就参考了其中的一些内容. 总结来说,自定义布局的实现有三种方式,分别是:组合控件.自绘控件和继承控件.下面将分别对这三种方式进行介绍. (一)组合控件 组合控件,顾名思义就是将一些小的控件组合起来形成一个新的控件,这些小的控件多是系统自带的控件.比如很多应用中普遍使用的标题栏控件,其实用的就是组合控件,那么下面将通过实现一个简单

Android 自定义布局 性能问题 初探

大家在写android 代码的时候,基本上都使用过如下几种布局 RelativeLayout,LinearLayout, FrameLayout 但是很多时候 这几种布局 也无法满足我们的使用.于是我们会考虑用自定义布局,使用自定义布局会有几个优点 比如可以减少view的使用啊,让ui显示的更加有效率啊,以及实现一些原生控件无法实现的效果. 我们首先去github上 下载一个开源项目 https://github.com/lucasr/android-layout-samples 注意这个项目是

android自定义布局中的平滑移动

在android应用程序的开发过程中,相信我们很多人都想把应用的交互做的比较绚丽,比如让界面切换平滑的滚动,还有热度灰常高的伪3D等界面效果,通常情况下,系统提供的应用在特效这方面只能为我们提供简单的动画接口,所以要想实现比较酷炫的效果还是要自己去开发布局控件(即所谓的自定义View.ViewGroup).小弟也经常做一些自定义的控件,最近工作比较清闲,所以便将自己对自定义布局控件的一些心得写出来,权当是自己的学习笔记了,各位高手看到了可以忽略 .下面就我最近工作中遇到的一个自定义控件开发做一些