RecyclerView能够灵活实现大数据集的展示,视图的复用管理比ListView更好,能够显示列表、网格、瀑布流等形式,且不同的ViewHolder能够实现item多元化的功能。但是使用起来会稍微麻烦—点,并且没有类似ListView的onItemClickListener监听事件,需要开发者自己实现。

首先用RecyclerView实现列表视图I

建立RecyclerViewActivity.java文件:

 1 public class RecyclerViewActivity extends AppCompatActivity {
2 private Button BtnLinear;
3 @Override
4 protected void onCreate(Bundle savedInstanceState) {
5 super.onCreate(savedInstanceState);
6 setContentView(R.layout.activity_recycler_view);//遇到R标红问题时import class就好了
7 BtnLinear=findViewById(R.id.btn_linear);
8 BtnLinear.setOnClickListener(new View.OnClickListener() {
9 @Override
10 public void onClick(View view) {
11 Intent intent=new Intent(RecyclerViewActivity.this,LinearRecyclerViewActivity.class);
12 startActivity(intent);
13 }
14 });
15 }
16 }

对应的activity_recycler_view.xml文件:

 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
2 android:layout_width="match_parent"
3 android:layout_height="wrap_content">
4
5 <Button
6 android:id="@+id/btn_linear"
7 android:layout_width="match_parent"
8 android:layout_height="wrap_content"
9 android:text="列表视图">
10 </Button>
11
12 </LinearLayout>

建立LinearRecyclerViewActivity.java文件:

 1 public class LinearRecyclerViewActivity extends AppCompatActivity {
2 private RecyclerView RVmain;
3 @Override
4 protected void onCreate(Bundle savedInstanceState) {
5 super.onCreate(savedInstanceState);
6 setContentView(R.layout.activity_linear_recycler_view);
7 RVmain=findViewById(R.id.rv_main);
8 RVmain.setLayoutManager(new LinearLayoutManager(LinearRecyclerViewActivity.this));
9 RVmain.addItemDecoration(new MyDecoration());//new了一个MyDecoration
10 RVmain.setAdapter(new LinearAdapter(LinearRecyclerViewActivity.this, new LinearAdapter.OnItemClickListener() {
11 @Override
12 public void onClick(int pos) {
13 Toast.makeText(LinearRecyclerViewActivity.this, "click..."+pos, Toast.LENGTH_SHORT).show();
14 }
15 }));//第二种点击事件方法
16 }
17
18 class MyDecoration extends RecyclerView.ItemDecoration{
19 @Override
20 public void getItemOffsets(@NonNull Rect outRect, @NonNull View view, @NonNull RecyclerView parent, @NonNull RecyclerView.State state) {
21 super.getItemOffsets(outRect, view, parent, state);
22 outRect.set(0,0,0,getResources().getDimensionPixelOffset(R.dimen.deviderHeight));
23 }//给列表视图在底部设置分隔线
24 }
25 }

设置分割线需在values下创建一个dimens.xml文件:

1 <resources>
2 <dimen name="deviderHeight">1dp</dimen>
3 </resources>

对应的activity_linear_recycler_view.xml文件:

 1 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
2 android:layout_width="match_parent"
3 android:layout_height="wrap_content">
4
5 <androidx.recyclerview.widget.RecyclerView
6 android:id="@+id/rv_main"
7 android:layout_width="match_parent"
8 android:layout_height="wrap_content"
9 android:background="@color/greydrak"/>
10 </RelativeLayout>

最后建立列表视图的适配器,LinearAdapter.java文件:

 1 public class LinearAdapter extends RecyclerView.Adapter<LinearAdapter.LinearViewHolder>{
2 private Context mcontext;
3 private OnItemClickListener mlistener;
4 public LinearAdapter(Context context,OnItemClickListener listener){
5 this.mcontext=context;
6 this.mlistener=listener;
7 }
8 @NonNull
9 @Override
10 public LinearAdapter.LinearViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
11 return new LinearViewHolder(LayoutInflater.from(mcontext).inflate(R.layout.layout_linear_item,parent,false));
12 }//这里原来是RecyclerView.ViewHolder,建立完LinearViewHolder class后要把它改成LinearAdapter.LinearViewHolder就可以了
13
14 @Override
15 public void onBindViewHolder(@NonNull LinearAdapter.LinearViewHolder holder,int position) {
16 holder.textView.setText("大家好,我又来了hiahia");
17 holder.itemView.setOnClickListener(new View.OnClickListener() {
18 @Override
19 public void onClick(View view) {
20 //Toast.makeText(mcontext, "click...", Toast.LENGTH_SHORT).show();//第一种方法,如果加position的话就会标红,所以没加,具体原因还不知道
21 mlistener.onClick(position);//第二种方法,反正点击事件没起作用,还是算了吧不弄了
22 }
23 });//增加点击事件,这是第一种方法
24 }//这里原来是RecyclerView.ViewHolder,建立完LinearViewHolder class后要把它改成LinearAdapter.LinearViewHolder就可以了
25
26 @Override
27 public int getItemCount() {
28 return 20;
29 }//设置有多少行
30
31 class LinearViewHolder extends RecyclerView.ViewHolder {
32 private TextView textView;
33 public LinearViewHolder(@NonNull View itemView) {
34 super(itemView);
35 textView=itemView.findViewById(R.id.tv_rtitle);
36 }
37 }
38 public interface OnItemClickListener{
39 void onClick(int pos);
40 }//点击事件的第二种方法,建立接口
41 }

单个元素的样式为layout_linear_iteam.xml文件:

 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
2 android:layout_width="match_parent"
3 android:layout_height="wrap_content"
4 android:orientation="vertical"
5 android:background="@color/white">
6
7 <TextView
8 android:id="@+id/tv_rtitle"
9 android:layout_width="match_parent"
10 android:layout_height="50dp"
11 android:gravity="center"
12 android:textColor="@color/black"
13 android:textSize="20sp"/>
14 </LinearLayout>

最后注意xml文件中总布局的android:layout_height如果是match_parent的话达不到想要的效果,所以要给他改成wrap_content

最终效果图:

用RecyclerView实现列表视图的更多相关文章

  1. Android Studio [RecyclerView/列表视图]

    LinearRecyclerViewActivity.java package com.xdw.a122.recyclerview; import android.graphics.Rect; imp ...

  2. jQuery Mobile 列表视图(带有自动检索)

    输入a: 输入b: jQuery Mobile 列表视图 jQuery Mobile 中的列表视图是标准的 HTML 列表:有序列表 (<ol>) 和无序列表 (<ul>). ...

  3. SharePoint 2013无代码实现列表视图的时间段动态筛选

    本文介绍两种为列表视图设置时间段筛选器的方法.其中,第一个方法用于SharePoint Server,第二个方法同时还能用于SharePoint Foundation. 方法一:日期筛选器Web部件 ...

  4. Sharepoint 2013列表视图和字段权限扩展插件(免费下载)!

    记得2014年春节期间,有博客园的网友通过QQ向我咨询Sharepoint 2013列表视图和字段权限扩展,因为之前他看到我博客介绍Sharepoint 2010列表视图和字段的权限控制扩展使用,问有 ...

  5. Android列表视图(List View)

    Android列表视图(ListView) ListView是一个显示滚动项列表的示视图组(viewgroup),通过使用适配器(Adapter)把这些列表项自动插入到列表中.适配器比如从一个数组或是 ...

  6. Android——列表视图(ListView)

    列表视图是android中最常用的一种视图组件,它以垂直列表的形式列出需要显示的列表项.在android中有两种方法向屏幕中添加列表视图:一种是直接使用ListView组件创建:另外一种是让Activ ...

  7. Android应用开发学习之列表视图

    作者:刘昊昱 博客:http://blog.csdn.net/liuhaoyutz 列表视图我们会经常用到,可以通过两种方式来创建列表视图,一种方式是直接使用ListView组件创建,另一种方式是通过 ...

  8. delphi列表视图组件(TListView)使用方法|实例

    TListView 组件以多种形式显示列表的项目,如详细资料.小图标.大图标等形式表示列表中的项目.    列表视图与用TListBox 组件实现的列表框非常相似.不同的是,列表视图可以让用户选择不同 ...

  9. 列表视图QlistView

    列表视图QlistView要配合setModel模型一起使用 例子一 QStringListModel()  字符串列表模型 import sys from PyQt5.QtWidgets impor ...

随机推荐

  1. cnpm安装教程

    安装cnpm,输入以下命令: sudo npm install -g cnpm --registry=https://registry.npm.taobao.org 输入cnpm -v ,检测是否正常 ...

  2. 带你十天轻松搞定 Go 微服务系列(三)

    序言 我们通过一个系列文章跟大家详细展示一个 go-zero 微服务示例,整个系列分十篇文章,目录结构如下: 环境搭建 服务拆分 用户服务(本文) 产品服务 订单服务 支付服务 RPC 服务 Auth ...

  3. Gulp自动化任务及nvm、npm常用命令

    项目环境配置 nvm:   node版本管理工具,安装和环境变量         cmd常用命令: · nvm use [version]: 切换至指定版本的node · nvm install no ...

  4. JavaScript多元运算符

    JavaScript多元运算符   JavaScript多元运算符 **实例:**` function test(9){ var a=4,b=11; return p > 1 ? p<b ...

  5. vue element InfiniteScroll 无限滚动 入坑记录

    select_law_by_tag() { this.laws_loading.is_loading = true; this.laws_loading.no_more = false; this.e ...

  6. CSS布局居中

    1.把margin设置为auto,此方法只能进行水平的居中,且对浮动元素或绝对定位元素无效.

  7. TestNG--@Factory

    原文地址:http://blog.csdn.net/wanghantong TestNg的@Factory注解从字面意思上来讲就是采用工厂的方法来创建测试数据并配合完成测试 其主要应对的场景是:对于某 ...

  8. GFS 分布式文件系统

    GFS 分布式文件系统 1.GlusterFS概述 : GlusterFS简介  a) GlusterFS是一-个开源的分布式文件系统. 由存储服务器.客户端以及NFS/Samba存储网关(可选,根据 ...

  9. docker基础——2.镜像管理

    1. Docker镜像的主要特点 (1) 采用分层构建机制. 最底层为bootfs,用于系统引导的文件系统,包括bootloader和kernel,容器启动后会被卸载以节约资源. 其上为rootfs, ...

  10. CentOS卸载自带的JDK

    一般在配置JDK之前要卸载CentOS自带的openjdk,接下来演示如何卸载自带的openjdk 进入root模式 查看jdk是否已经安装jdk rpm -qa | grep jdk 3. 卸载op ...