通过一个demo记录recyclerview的基础用法,包括设置item间距,adapter内监听点击和接口回调监听。
MyAdapter

package com.example.kw.recyclerviewtest;import android.content.Context;
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.TextView;
import android.widget.Toast;import java.util.List;public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> {private Context mContext;private List<String> mData;private OnItemClickListener mListener;public MyAdapter(Context context, List<String> data, OnItemClickListener listener){this.mContext = context;this.mData = data;this.mListener = listener;}@NonNull@Overridepublic MyAdapter.MyViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {MyViewHolder myViewHolder = new MyViewHolder(LayoutInflater.from(mContext).inflate(R.layout.my_item, viewGroup, false)); // 传入item布局return myViewHolder;}@Overridepublic void onBindViewHolder(@NonNull MyAdapter.MyViewHolder viewHolder, final int i) {viewHolder.textView.setText(mData.get(i));viewHolder.itemView.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {//Toast.makeText(mContext, "内部点击", Toast.LENGTH_SHORT).show();mListener.onClick(i);}});}@Overridepublic int getItemCount() {return mData.size();}class MyViewHolder extends RecyclerView.ViewHolder {private TextView textView;public MyViewHolder(View itemView) {super(itemView);textView = itemView.findViewById(R.id.tv_item); // 通过布局找子控件,itemView是item布局,即my_item.xml的inflate}}// 外部接口回调监听public interface OnItemClickListener {void onClick(int pos);}
}

my_item.xml
这是单个item的布局,可以放置多个子控件,这里只放了一个TextView

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical" android:layout_width="match_parent"android:layout_height="wrap_content"android:background="#FFFFFF"><TextViewandroid:id="@+id/tv_item"android:layout_width="match_parent"android:layout_height="50dp"android:gravity="center"android:textColor="#000"android:textSize="20sp"/></LinearLayout>

activity_linear_recyclerViewActivity
这个是recyclerview的布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:background="#FF353F47"><android.support.v7.widget.RecyclerViewandroid:id="@+id/rv_main"android:layout_width="match_parent"android:layout_height="wrap_content"></android.support.v7.widget.RecyclerView></LinearLayout>

dimens.xml
间距插件

<?xml version="1.0" encoding="utf-8"?>
<resources><dimen name="dividerHeight">3dp</dimen>
</resources>

使用recyclerview的活动

package com.example.kw.recyclerviewtest;import android.graphics.Rect;
import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.View;
import android.widget.Toast;import java.util.ArrayList;
import java.util.List;public class LinearRecyclerViewActivity extends AppCompatActivity {private RecyclerView mRvMain;private List<String > mData = new ArrayList<String>();private void initData() {mData.add("巴塞罗那");mData.add("皇家马德里");mData.add("尤文图斯");mData.add("拜仁慕尼黑");mData.add("曼城");mData.add("曼联");mData.add("多特蒙德");mData.add("利物浦");mData.add("巴黎圣日耳曼");mData.add("沙尔克04");mData.add("勒沃库森");mData.add("托特纳姆热刺");mData.add("那不勒斯");mData.add("国际米兰");mData.add("AC米兰");mData.add("马德里竞技");mData.add("切尔西");}@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_linear_recycler_view);initData();mRvMain = findViewById(R.id.rv_main);mRvMain.setLayoutManager(new LinearLayoutManager(LinearRecyclerViewActivity.this));mRvMain.addItemDecoration(new MyDecoration());mRvMain.setAdapter(new MyAdapter(LinearRecyclerViewActivity.this, mData, new MyAdapter.OnItemClickListener() {@Overridepublic void onClick(int pos) {Toast.makeText(LinearRecyclerViewActivity.this, "外部点击 " + pos, Toast.LENGTH_SHORT).show();}}));}class MyDecoration extends RecyclerView.ItemDecoration {@Overridepublic void getItemOffsets(@NonNull Rect outRect, @NonNull View view, @NonNull RecyclerView parent, @NonNull RecyclerView.State state) {super.getItemOffsets(outRect, view, parent, state);outRect.set(0, 0, 0, getResources().getDimensionPixelOffset(R.dimen.dividerHeight)); // 1dp间隔下划线}}
}

RecyclerView点击事件监听相关推荐

  1. android 判断按钮是否已经有onclicklinstener,通过点击事件监听setOnClickListener彻底理解回调...

    前言 老司机们对于回调肯定熟悉得不能再熟悉了,但是新司机可能还是一脸懵逼的,我比较笨,当年懵逼了好久,看夏安明的这一篇博客地址,虽然下边的留言都是,写得好!懂了懂了!但是我当时看了三遍还是不懂好吗 - ...

  2. 通过点击事件监听 setOnClickListener 彻底理解回调-Android

    前言 老司机们对于回调肯定熟悉得不能再熟悉了,但是新司机可能还是一脸懵逼的,我比较笨,当年懵逼了好久,看夏安明的这一篇博客地址,虽然下边的留言都是,写得好!懂了懂了!但是我当时看了三遍还是不懂好吗 - ...

  3. angular4点击事件监听_JavaScript从零开始——DOM事件编程(1)

    事件的本质是程序各个组成部分之间的一种通信方式,也是异步编程的一种实现.DOM 支持大量的事件,本章开始,我们一起看看 DOM 的事件编程. 1 概念 DOM 的事件操作(监听和触发),都定义在Eve ...

  4. android 键盘点击事件监听事件,Android 键盘事件触发以及监听

    一.Android 手动显示和隐藏软键盘 如果输入法在窗口上已经显示,则隐藏,反之则显示 InputMethodManager imm = (InputMethodManager) getSystem ...

  5. java按钮点击事件监听_按钮事件监听

    [java]代码库/** * 功能:按钮事件监听 */ package com.test; import java.awt.*; import javax.swing.*; import java.a ...

  6. html表格td点击事件,监听layui中的table中的td点击事件

    上图 就是用layui生成的一个table表格; 在这里我们给td绑定class,再通过jq的方式去监听是不可行的; 会监听不到事件; 不过在layui中,给了监听方法,并且还可以获取到该行所有的数据 ...

  7. android通知栏显示,通知栏点击事件监听

    android通知是通过Notification来实现的,显示在通知栏,不管是系统通知还是本地通知都可以通过Notification显示在通知栏中. 通知显示参考:https://blog.csdn. ...

  8. js鼠标点击事件监听

    鼠标移动监听: <script>var cont = 0;function f() {document.getElementById("an1").innerHTML ...

  9. android百度地图的点击事件监听,百度地图监听事件addEventListener无效

    我这到底是什么问题啊,能打开,能定位,能设置中心,就是监听事件不起作用加了setTimeout就会闪退,求帮助,急急急,很急 var winHeight,map,lat='39.989539',lon ...

最新文章

  1. Tomcat修改端口、添加域名访问
  2. android的各种*.img 文件
  3. 夯实“茄克”核心竞争力,高端新国货谋图百年基业
  4. Java中多线程并发处理方式
  5. P2568-GCD【欧拉函数,欧拉筛】
  6. python大作业外星人入侵_【python3小白上路系列】外星人入侵——开始
  7. CCF201803-3 URL映射(100分)【文本处理+暴力】
  8. 洛谷P2939 [USACO09FEB]改造路Revamping Trails(最短路)
  9. js学习总结----浏览器滚动条卷去的高度scrolltop
  10. vue 中使用菜鸟打印
  11. C# 将Excel导出PDF
  12. 线缆干扰编码器输出结果,双绞线引起的干扰编码器问题
  13. 银河帝国----基地与地球
  14. wind 10 安装node环境
  15. 哈登独得40分保罗复出 火箭主场103:98复仇魔术
  16. javascript_javascript吊装
  17. 深度学习入门(六)——softmax函数的改良
  18. 计算机网就是因特网对吗,计算机因特网的介绍
  19. 测试电梯的测试用例_电梯测试用例
  20. 02 FreeRTOS 任务的延续

热门文章

  1. 如何把配置文件集成到.exe中_VSCode如何使用cmder
  2. php防止模拟请求,php防止伪造跨站请求实现程序_PHP教程
  3. Algorithm:【Algorithm算法进阶之路】之十大经典排序算法
  4. Python之pandas:pandas中to_csv()、read_csv()函数的index、index_col(不将索引列写入)参数详解之详细攻略
  5. Python之woe:woe库的简介、安装、使用方法之详细攻略
  6. ML之MIC:利用某数据集计算机最大信息系数MIC并可视化MIC矩阵热图及其代码实现
  7. 成功解决WARNING:tensorflow:From :read_data_sets (from tensorflow.contrib.learn.python.learn.
  8. 成功解决TypeError: __init__() got an unexpected keyword argument 'n_iterations'
  9. Paper之BigGAN:ICLR 2019最新论文《LARGE SCALE GAN TRAINING FOR HIGH FIDELITY NATURAL IMAGE SYNTHESIS》(未完待续)
  10. python中的with