• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Android > 从源码角度入手实现RecyclerView的Item点击事件,recyclerviewitem

从源码角度入手实现RecyclerView的Item点击事件,recyclerviewitem

作者:网友 字体:[增加 减小] 来源:互联网 时间:2017-05-26

网友通过本文主要向大家介绍了view only item,recyclerview删除item,listviewitem,recyclerview获取item,listviewitem用法等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

从源码角度入手实现RecyclerView的Item点击事件,recyclerviewitem


 转载请注明出处:http://www.cnblogs.com/cnwutianhao/p/6758373.html 

 

 RecyclerView 作为 ListView 和 GridView 的替代产物,相信在Android界已广为流传。

 RecyclerView 本是不会有类似 ListView 的那种点击事件,但是知道和会用又是两种情况,跟随我一起从源码角度分析,RecyclerView 点击事件。

 首先看一下 Google 对 ListView 家族谱的介绍:

 可以看出 ListView 归根结底就是一个 View 。

 再来看一下 Google 对 OnItemClickListener 接口做的描述:

 源代码总结的很全面、详细。

 下面看一下 ListView 调用 onItemClick 点击事件。

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        // TODO
    }
});

 其实不然,RecyclerView 也可以使用 onItemClick 点击事件。请往下看:

 示例图片(Material Design + Butter Knife + Snackbar):

 

 实现 RecyclerView 点击事件

 1.导入必要的库

 Material Design 时代的Android,少不了各类库的支持

 UI类库

compile 'com.android.support:appcompat-v7:25.3.1'
compile 'com.android.support:cardview-v7:25.3.1'
compile 'com.android.support:recyclerview-v7:25.3.1'
compile 'com.android.support:design:25.3.1'

 Butter Knife (都啥时代了,快放弃 findViewById 吧)

compile 'com.jakewharton:butterknife:8.5.1'
annotationProcessor 'com.jakewharton:butterknife-compiler:8.5.1'

 

 2.布局文件(分为 主界面 和 Item布局界面)

 主界面(RecyclerView)

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <android.support.v7.widget.RecyclerView
        android:id="@+id/recycler_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:overScrollMode="never"
        android:scrollbars="none" />

</RelativeLayout>

 Item布局界面(CardView)

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="80dp"
    android:layout_margin="10dp"
    android:background="@drawable/recycler_item_selector"
    app:cardBackgroundColor="@color/colorPrimary"
    app:cardCornerRadius="10dp"
    app:cardElevation="10dp">

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:layout_margin="10dp"
        android:text="item"
        android:textColor="@android:color/white"
        android:textSize="24sp" />

</android.support.v7.widget.CardView>

 

 3.自定义 Adapter 类

public class DemoAdapter extends RecyclerView.Adapter<DemoAdapter.ViewHolder> {

    private onRecyclerViewItemClick mOnRvItemClick;

    private Context mContext;

    String[] strings;

    public DemoAdapter(Context ctx, String[] strings, onRecyclerViewItemClick onRvItemClick) {
        mContext = ctx;
        this.mOnRvItemClick = onRvItemClick;
        this.strings = strings;
    }

    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(mContext).inflate(R.layout.activity_main_item, parent, false);
        return new ViewHolder(view);
    }

    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
        holder.setData(position);
    }

    @Override
    public int getItemCount() {
        return 20;
    }


    public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
        @BindView(R.id.textView)
        TextView textView;

        public ViewHolder(View itemView) {
            super(itemView);
            ButterKnife.bind(this, itemView);
            itemView.setOnClickListener(this);
        }

        public void setData(int position) {
            textView.setText("第" + position + "行");
        }

        @Override
        public void onClick(View view) {
            if (mOnRvItemClick != null)
                mOnRvItemClick.onItemClick(view, getAdapterPosition());
        }
    }

    /**
     * item点击接口
     */
    public interface onRecyclerViewItemClick {
        void onItemClick(View v, int position);
    }

}

 

4.主类(实现 onItemClick 方法 + Butter Knife + Snackbar)

public class MainActivity extends AppCompatActivity {

    @BindView(R.id.recycler_view)
    RecyclerView mRecyclerView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ButterKnife.bind(this);
        DemoAdapter myAdapter = new DemoAdapter(this, null, 


 
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 从源码角度入手实现RecyclerView的Item点击事件,recyclerviewitem

相关文章

  • 2017-05-26切换横竖屏的时候Activity的生命周期变化情况,activity生命周期
  • 2017-05-222.3.9 RatingBar(星级评分条)
  • 2017-05-26Linux内核系列—11.操作系统开发之ELF格式,linuxelf
  • 2017-05-26解决通过Intent调用系统拍照程序,返回图片太小的问题,intent调用
  • 2017-05-26Listview详解,listview
  • 2017-05-222.3.5.RadioButton(单选按钮)&Checkbox(复选框)
  • 2017-05-26记一次Android系统下解决音频UnderRun问题的过程
  • 2017-05-26订单流程view,订单view
  • 2017-05-26Android开发艺术探索学习笔记(十一),android艺术探索
  • 2017-05-26项目总结手机号+短信验证码登录,手机号验证码

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 7.5.6 WebView处理网页返回的错误码信息
    • 关于Android中的三级缓存,
    • Android Studio: Error:Cannot locate factory for objects of type DefaultGradleConnector, as ConnectorServiceRegistry,locateregistry
    • Android之获取数据库路径,android获取数据库
    • 单机搭建Android开发环境(二),单机搭建android开发
    • 7.1.3 Android HTTP请求方式:HttpURLConnection
    • 手机安全卫士——缓存清理,安全卫士缓存清理
    • 使用 Diagwait 作为诊断工具,获取用于诊断 Oracle Clusterware 节点驱逐
    • android button的操作
    • android基础部分再学习--AIDL

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有