RecyclerView点击事件

package zhangphil.myrecyclerview;

import android.support.v7.app.ActionBarActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.RecyclerView.ViewHolder;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
import android.os.Bundle;

/*
 * Android RecyclerView点击事件
 *
 *
 * Android最新的RecyclerView没有像之前的Android ListView那样事先已经提供好了
 * onItemClickListener()这样的回调事件响应用户点击。
 * 如果要实现类似ListView的onItemClickListener,则需要我们自己写代码实现。实现的思路和解决方案有多种。
 * 本案例的解决思路是这样的:
 * 第1步:自己写一个public interface OnRecyclerViewItemClickListener,此接口用于回调响应。用户的点击事件。
 * 第2步:把OnRecyclerViewItemClickListener new出来,其实就是完成里面的接口方法:onRecyclerViewItemClickListener()。我们将在onRecyclerViewItemClickListener方法体内完成类似ListView的onItemClickListener()。
 * 第3步,关键点。在此处,实现RecyclerView点击响应回调的解决方案出现多种选择和道路,本案例选择在ViewHolder的构造函数中为参数View增加点击事件:
 * public MyViewHolder(View itemView) {
 super(itemView);

 itemView.setOnClickListener(new View.OnClickListener() {

 @Override
 public void onClick(View v) {
 _click(v);
 }
 });
 }

 然后我们在外部额外多写一个: _click(View v),然后调用_click(v)触发onRecyclerViewItemClickListener(注意:根据需求,此过程中可以携带和传递更多参数):
 _click(View v) {
 mOnRecyclerViewItemClickListener.onRecyclerViewItemClickListener(this, v, pos);
 }

 至此,就完成了为RecyclerView增加点击响应时间的功能。
 *
 *
 * 		by Phil
 *
 * */

public class MainActivity extends ActionBarActivity {

	// 增加点击事件接口 part 1
	private OnRecyclerViewItemClickListener mOnRecyclerViewItemClickListener = new OnRecyclerViewItemClickListener() {

		// 具体的点击事件在此
		@Override
		public void onRecyclerViewItemClickListener(ViewHolder holder,
				View view, int pos) {
			Toast.makeText(getApplication(), pos + "", Toast.LENGTH_SHORT)
					.show();
		}
	};

	public interface OnRecyclerViewItemClickListener {
		public void onRecyclerViewItemClickListener(ViewHolder holder,
				View view, int pos);
	}

	private RecyclerView mRecyclerView;

	// 测试用的数据集条目。
	private final int SIZE = 30;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		mRecyclerView = (RecyclerView) findViewById(R.id.my_recycler_view);

		LinearLayoutManager mLayoutManager = new LinearLayoutManager(this);

		// Orientation=LinearLayout.HORIZONTAL ,水平的“ListView”。
		// VERTICAL,就是以前的ListView样式。
		mLayoutManager.setOrientation(LinearLayout.HORIZONTAL);
		mRecyclerView.setLayoutManager(mLayoutManager);

		RecyclerView.Adapter mAdapter = new MyRecyclerViewAdapter();
		mRecyclerView.setAdapter(mAdapter);
	}

	public class MyRecyclerViewAdapter extends
			RecyclerView.Adapter<MyViewHolder> {

		public MyRecyclerViewAdapter() {
			super();
		}

		@Override
		public MyViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {

			TextView tv = new TextView(getApplication());
			tv.setPadding(20, 10, 20, 10);
			tv.setGravity(Gravity.CENTER);

			MyViewHolder holder = new MyViewHolder(tv);
			holder.text = tv;

			return holder;
		}

		@Override
		public void onBindViewHolder(MyViewHolder viewHolder, int pos) {
			viewHolder.text.setText("pos:" + pos);
			viewHolder.pos = pos;
		}

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

	private class MyViewHolder extends RecyclerView.ViewHolder {
		public TextView text;
		public int pos;

		public MyViewHolder(View itemView) {
			super(itemView);

			itemView.setOnClickListener(new View.OnClickListener() {

				@Override
				public void onClick(View v) {
					_click(v);
				}
			});
		}

		// 增加点击事件接口 part 2,触发点击事件。
		private final void _click(View v) {
			mOnRecyclerViewItemClickListener.onRecyclerViewItemClickListener(
					this, v, pos);
		}
	}
}

activity_main.xml

<?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:orientation="vertical" >

    <android.support.v7.widget.RecyclerView
        android:id="@+id/my_recycler_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</LinearLayout>



版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-09 20:45:14

RecyclerView点击事件的相关文章

RecyclerView点击事件与长按事件

最近开始使用RecyclerView了.RecyclerView很是强大,不过官方不提供点击事件. 在网上找了一下实现方法,有的说在adapter里添加回调接口来实现点击事件与长按事件. 不过经过测试,有时候会产生这样的现象:点击item跳转到下一个页面,再返回回来时, item的点击事件会失效.后来在Stack Overflow找到了新的方法. 原文链接如下:RecyclerView onClick.这里 贴上代码: public class RecyclerItemClickListener

Recyclerview点击事件,更新item的UI+更新Recyclerview外的控件

项目中用到了Recyclerview,在第一行代码中学到了一种相对来说简单的点击事件方法,可是这种点击事件是在adapter中写的,没有教怎么更新item的ui和更新Recyclerview之外的控件,研究了一下,写下我的方案. 需求如下图: 首先设置点击事件,在ViewHolder中添加View view变量来保存item最外层布局的实例. 然后在onCreateViewHolder()中注册点击事件,可以为item设置点击事件,也可以为item中的控件eg:TextView设置点击事件.这正

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

转载请注明出处:http://www.cnblogs.com/cnwutianhao/p/6758373.html RecyclerView 作为 ListView 和 GridView 的替代产物,相信在Android界已广为流传. RecyclerView 本是不会有类似 ListView 的那种点击事件,但是知道和会用又是两种情况,跟随我一起从源码角度分析,RecyclerView 点击事件. 首先看一下 Google 对 ListView 家族谱的介绍: 可以看出 ListView 归根

揭开RecyclerView的神秘面纱(二):处理RecyclerView的点击事件

前言 上一篇文章揭开RecyclerView的神秘面纱(一):RecyclerView的基本使用中,主要讲述了RecyclerView的基本使用方法,不同的布局管理器而造成的多样化展示方式,展示了数据之后,一般都会与用户进行交互,因此我们需要处理用户的点击事件.在ListView和GridView提供了onItemClickListener这个监听器,然而我们查找RecyclerView的API却没有类似的监听器,因此我们需要自己手动处理它的点击事件. 以下提供两种方法来实现处理Recycler

Recycleview点击事件监听器(转自:http://www.jianshu.com/p/f2e0463e5aef)

package com.taven.uav.view; import android.content.Context;import android.support.v7.widget.RecyclerView;import android.view.GestureDetector;import android.view.MotionEvent;import android.view.View; /** * @Author Weizh * @Date 2017/11/7 * @Descriptor

手机商城第五天,用recyclerview设置秒杀区域的布局,以及为该recyclerview设置item级的点击事件

代码已经托管到码云上,有兴趣的小伙伴可以下载看看: https://git.oschina.net/joy_yuan/ShoppingMall 之前可能忘记了web端,也就是这个APP里面内容的来源.其实就是一个简单的Tomcat里的小项目,目的是给这个APP提供一个json字符串,以及字符串里对应的内容,如图片,文字,这个web项目会放到下面. 这次的效果图如下,设置秒杀的布局以及给秒杀的每个item设置点击事件 这个秒杀布局,用的是recyclerview的横向布局. 一.在homeFrag

从头开始学 RecyclerView(二) 添加item点击事件

不管了,先来张图 偶吐了个槽 item点击事件必须手动添加,默认并没有一个显式的API接口可供调用. 为了节约学习时间,网上找了篇很不错的文章.这里基本就复制了. 添加点击事件 RecyclerView#addOnItemTouchListener 分析 查看RecyclerView源码可以看到,RecyclerView预留了一个Item的触摸事件方法: public void addOnItemTouchListener(OnItemTouchListener listener) { mOnI

RecyclerView的点击事件添加-------接口回调的形式添加

1 package com.example.recyclerviewdemo; 2 3 import android.support.v7.widget.RecyclerView; 4 import android.util.Log; 5 import android.view.LayoutInflater; 6 import android.view.View; 7 import android.view.ViewGroup; 8 import android.widget.TextView;

android v7兼容包RecyclerView的使用(四)——点击事件的不同方式处理

前三篇文章 android v7兼容包RecyclerView的使用(三)--布局管理器的使用 android v7兼容包RecyclerView的使用(二) android v7兼容包RecyclerView的使用(一) 介绍了RecyclerView的使用以及常见的相关类和布局管理器的灵活之处.写了这么多篇,还没涉及到用户交互,那么怎么处理点击事件呢. 在RecyclerView中你会惊奇的发现,该类中并没有OnItemClickListener监听器监听我们的单击事件,也没有OnItemL