用RecyclerView实现列表视图
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实现列表视图的更多相关文章
- Android Studio [RecyclerView/列表视图]
LinearRecyclerViewActivity.java package com.xdw.a122.recyclerview; import android.graphics.Rect; imp ...
- jQuery Mobile 列表视图(带有自动检索)
输入a: 输入b: jQuery Mobile 列表视图 jQuery Mobile 中的列表视图是标准的 HTML 列表:有序列表 (<ol>) 和无序列表 (<ul>). ...
- SharePoint 2013无代码实现列表视图的时间段动态筛选
本文介绍两种为列表视图设置时间段筛选器的方法.其中,第一个方法用于SharePoint Server,第二个方法同时还能用于SharePoint Foundation. 方法一:日期筛选器Web部件 ...
- Sharepoint 2013列表视图和字段权限扩展插件(免费下载)!
记得2014年春节期间,有博客园的网友通过QQ向我咨询Sharepoint 2013列表视图和字段权限扩展,因为之前他看到我博客介绍Sharepoint 2010列表视图和字段的权限控制扩展使用,问有 ...
- Android列表视图(List View)
Android列表视图(ListView) ListView是一个显示滚动项列表的示视图组(viewgroup),通过使用适配器(Adapter)把这些列表项自动插入到列表中.适配器比如从一个数组或是 ...
- Android——列表视图(ListView)
列表视图是android中最常用的一种视图组件,它以垂直列表的形式列出需要显示的列表项.在android中有两种方法向屏幕中添加列表视图:一种是直接使用ListView组件创建:另外一种是让Activ ...
- Android应用开发学习之列表视图
作者:刘昊昱 博客:http://blog.csdn.net/liuhaoyutz 列表视图我们会经常用到,可以通过两种方式来创建列表视图,一种方式是直接使用ListView组件创建,另一种方式是通过 ...
- delphi列表视图组件(TListView)使用方法|实例
TListView 组件以多种形式显示列表的项目,如详细资料.小图标.大图标等形式表示列表中的项目. 列表视图与用TListBox 组件实现的列表框非常相似.不同的是,列表视图可以让用户选择不同 ...
- 列表视图QlistView
列表视图QlistView要配合setModel模型一起使用 例子一 QStringListModel() 字符串列表模型 import sys from PyQt5.QtWidgets impor ...
随机推荐
- mac 更新到big sur 后,parallels虚拟机的一些问题:由于您尚未获得访问其中一些文件的授权,所以您不能恢复“Windows 10
由于您尚未获得访问其中一些文件的授权,所以您不能恢复"Windows 10 Mac上使用PD虚拟机,打开系统时提示"由于您尚未获得访问其中一些文件的授权,所以您不能恢复" ...
- python函数关键字实参传参
#!/usr/bin/python #coding=utf-8 #好好学习,天天向上 def describe_pet(type,name): print(f"i have a {type} ...
- vscode开发PHP攻略
前言 此文主要介绍如何使用vscode开发PHP,开发体验可以说和php死桃木不相上下(虽然我没用过php死桃木) PHP扩展组合 一.卡巴斯基组合 PHP IntelliSense PHP Debu ...
- asp.net core监控—引入Prometheus(三)
上一篇博文中说到Prometheus有四种指标类型:Counter(计数器).Gauge(仪表盘).Histogram(直方图).Summary(摘要),并且我们做了一个Counter的Demo,接下 ...
- Javascript之递归求裴波那契数
一.遍历的方式性能更加,递归的方式代码利于阅读.简短,性能略差 二.裴波那契数定义: · 位置0的裴波那契数为0 · 1和2的裴波那契数为1 · n(n > 2)裴波那契数为 (n-1)的裴波那 ...
- 推荐一个基于Dapr的 Red Dog 的完整微服务应用程序
微服务尽管构建起来非常困难,但它们已成为一种越来越流行的架构模式.随着开发人员开始将他们现有的单体代码库迁移到微服务系统,他们花费大量时间来处理分布式应用程序带来的固有挑战,例如状态管理和服务调用.通 ...
- VS Code拓展--Language Support for Java(TM) by Red Hat(1.3.0)
Language Support for Java(TM) by Red Hat(1.3.0) 注意:版本问题,可能会有部分出入 功能目录 设置 java.home 作用: 指定用于启动 Java 语 ...
- [源码解析] 模型并行分布式训练Megatron (2) --- 整体架构
[源码解析] 模型并行分布式训练Megatron (2) --- 整体架构 目录 [源码解析] 模型并行分布式训练Megatron (2) --- 整体架构 0x00 摘要 0x01 启动 1.1 分 ...
- 计算当前日期n天后的日期
//计算180天后的日期//180*24*60*60*1000//更具时间戳计算n天前的日期 $(function () { var timestamp =Date.parse(new Date()) ...
- iOS 性能优化系列
Objective-C 高性能的循环 使用 Swift 和 Objective-C 执行 iOS 内存管理的 7 个简单技巧 @autoreleasepool-内存的分配与释放