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. IDEA包名分层问题

    解决办法: 将默认的"Hide empty Middle Packages"或者"compact middle packages"勾选项去掉,这样就不会把中间空 ...

  2. vue开源项目有点全

    目录 UI组件 开发框架 实用库 服务端 辅助工具 应用实例 Demo示例 UI组件 element ★31142 - 饿了么出品的Vue2的web UI工具套件 Vux ★14104- 基于Vue和 ...

  3. python数据操作--8

    转:https://www.tuicool.com/wx/MB7nieb 数据类型 整数, 浮点数, 字符串, 布林值(True,False) 列表(list), 不可变的列表 Tuple, 集合(没 ...

  4. 学习JAVAWEB第七天

    ## Bootstrap: 1. 概念: 一个前端开发的框架,Bootstrap,来自 Twitter,是目前很受欢迎的前端框架.Bootstrap 是基于 HTML.CSS.JavaScript 的 ...

  5. CentOS升级polkit版本,解决 Linux Polkit 存在权限提升的漏洞 (CVE-2021-4034)

    漏洞描述 受影响版本的 pkexec 无法正确处理调用参数计数,最终尝试将环境变量作为命令执行,攻击者可以通过修改环境变量来利用此漏洞,诱使 pkexec 执行任意代码,从而导致将本地权限提升为 ro ...

  6. plsql 数据库事件触发器

    --4.数据库事件触发器 需要超管的权限 /* 数据库事件触发器有数据库级和模式级两种. 前者定义在整个数据库上,触发事件是数据库事件,如数据库的启动.关闭,对数据库的登录或退出. 后者定义在模式上, ...

  7. Luogu P1314 [NOIP2011 提高组] 聪明的质监员

    P1314 [NOIP2011 提高组] 聪明的质监员 题意 题目描述 给定\(n\)个物品,给定每个物品的 重量 \(w_i\) 和 价值 \(v_i\) 给定一个标准值 \(s\) 以及一个参数 ...

  8. java中args是什么意思?

    1. 字符串变量名(args)属于引用变量,名字代号而已,可以自己取的. 2.总的来说就是个存放字符串数组用的, 去掉就不知道 "args" 声明的变量是什么类型了. 3.如果有 public sta ...

  9. Base64补充

    1.Base64简单说明 描述:Base64可以成为密码学的基石,非常重要. 特点:可以将任意的二进制数据进行Base64编码 结果:所有的数据都能被编码为并只用65个字符就能表示的文本文件. 65字 ...

  10. [转]API性能测试基本性能指标及要求

    原文链接http://blog.csdn.net/strawbingo/article/details/46458959 指标的基本概念 1.事务(Transaction) 在web性能测试中,一个事 ...