RecyclerView条目的点击事件,接口回调
2017-12-18 14:41
435 查看
第一个,MyOnItemClickListener.java,响应 RecyclerView item的点击事件:
import android.view.View; /** * item点击接口 */ public interface MyOnItemClickListener { void OnItemClickListener(View view, int position); }第二个,MyOnItemLongClickListener.java,响应 RecyclerView item的长按事件:
import android.view.View; /** * item长按接口 */ public interface MyOnItemLongClickListener { void OnItemLongClickListener(View view, int position); }
然后在MyRecyclerViewAdapter里面声明这两个接口,定义两个方法,用来让adapter在Activity里面回调,并在onBindViewHolder中给item设置监听:定义的方法:
/*** 列表点击事件** @param itemClickListener*/public void setOnItemClickListener(MyOnItemClickListener itemClickListener) {this.itemClickListener = itemClickListener;}/*** 列表长按事件** @param itemLongClickListener*/public void setOnItemLongClickListener(MyOnItemLongClickListener itemLongClickListener) {this.itemLongClickListener = itemLongClickListener;}onBindViewHolder中:
/*自定义item的点击事件不为null,设置监听事件*/if (itemClickListener != null) {myViewHolder.itemView.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {itemClickListener.OnItemClickListener(myViewHolder.itemView, myViewHolder.getLayoutPosition());}});}/*自定义item的长按事件不为null,设置监听事件*/if (itemLongClickListener != null) {myViewHolder.itemView.setOnLongClickListener(new View.OnLongClickListener() {@Overridepublic boolean onLongClick(View view) {itemLongClickListener.OnItemLongClickListener(myViewHolder.itemView, myViewHolder.getLayoutPosition());return true;}});}最后在Activity里面调用setOnItemClickListener和setOnItemLongClickListener就可以了。下面看完整代码: MyRecyclerViewAdapter.java
import android.content.Context;import android.support.v7.widget.RecyclerView;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.TextView;import java.util.List;/*** Created by jia on 2015/10/16.*/class MyRecyclerViewAdapter extends RecyclerView.Adapter {private Context context;private List<String> list;private MyOnItemClickListener itemClickListener;private MyOnItemLongClickListener itemLongClickListener;public MyRecyclerViewAdapter(Context context, List<String> list) {this.context = context;this.list = list;}/*** onCreateViewHolder中负责为Item创建视图** @param viewGroup* @param i* @return*/@Overridepublic RecyclerView.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {/*初始化填充RecyclerView的item*/View viewItem = LayoutInflater.from(context).inflate(R.layout.list_item, viewGroup, false);/*返回自定义的ViewHolder*/MyViewHolder myViewHolder = new MyViewHolder(viewItem);return myViewHolder;}/*** onBindViewHolder负责将数据绑定到Item的视图上。** @param viewHolder* @param position*/@Overridepublic void onBindViewHolder(RecyclerView.ViewHolder viewHolder, int position) {/*将接收到的ViewHolder强转成自定义的VIewHolder*/final MyViewHolder myViewHolder = (MyViewHolder) viewHolder;/*为Item设置数据*/myViewHolder.getIdView().setText(list.get(position));myViewHolder.getNameView().setText("name");/*自定义item的点击事件不为null,设置监听事件*/if (itemClickListener != null) {myViewHolder.itemView.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {itemClickListener.OnItemClickListener(myViewHolder.itemView, myViewHolder.getLayoutPosition());}});}/*自定义item的长按事件不为null,设置监听事件*/if (itemLongClickListener != null) {myViewHolder.itemView.setOnLongClickListener(new View.OnLongClickListener() {@Overridepublic boolean onLongClick(View view) {itemLongClickListener.OnItemLongClickListener(myViewHolder.itemView, myViewHolder.getLayoutPosition());return true;}});}}/*** 本方法决定了绘制item的数量** @return*/@Overridepublic int getItemCount() {return list.size();}/*** 列表点击事件** @param itemClickListener*/public void setOnItemClickListener(MyOnItemClickListener itemClickListener) {this.itemClickListener = itemClickListener;}/*** 列表长按事件** @param itemLongClickListener*/public void setOnItemLongClickListener(MyOnItemLongClickListener itemLongClickListener) {this.itemLongClickListener = itemLongClickListener;}class MyViewHolder extends RecyclerView.ViewHolder {private TextView idView;private TextView nameView;public MyViewHolder(View itemView) {super(itemView);idView = (TextView) itemView.findViewById(R.id.id);nameView = (TextView) itemView.findViewById(R.id.name);}public TextView getIdView() {return idView;}public TextView getNameView() {return nameView;}}}MainActivity.java
import android.os.Bundle;import android.support.v7.app.ActionBarActivity;import android.support.v7.widget.GridLayoutManager;import android.support.v7.widget.LinearLayoutManager;import android.support.v7.widget.RecyclerView;import android.support.v7.widget.StaggeredGridLayoutManager;import android.view.View;import android.widget.Toast;import java.util.ArrayList;import java.util.List;public class MainActivity extends ActionBarActivity {private RecyclerView recyclerView;private MyRecyclerViewAdapter adapter;private List<String> list;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);recyclerView = (RecyclerView) findViewById(R.id.recyclerView);initData();/** 初始化一个布局管理器,这里是默认的竖直线性,效果如上图所示* 其实完整写法为:* LinearLayoutManager manager = new LinearLayoutManager(context, orientation, reverseLayout);* 其中三个参数分别表示:* 1.context:上下文* 2.orientation:布局方向;* LinearLayoutManager.VERTICAL:竖直方向(默认)* LinearLayoutManager.HORIZONTAL:水平方向* 3.reverseLayout:布局数据是否反向;false:正常(默认);true:反向;* 下边的写法就相当于:new LinearLayoutManager(this,LinearLayoutManager.VERTICAL,false);*/LinearLayoutManager manager = new LinearLayoutManager(this);recyclerView.setLayoutManager(manager);adapter = new MyRecyclerViewAdapter(MainActivity.this, list);recyclerView.setAdapter(adapter);/*点击事件*/adapter.setOnItemClickListener(new MyOnItemClickListener() {@Overridepublic void OnItemClickListener(View view, int position) {Toast.makeText(getApplicationContext(), "position" + position + "被点击", Toast.LENGTH_SHORT).show();}});/*长按事件*/adapter.setOnItemLongClickListener(new MyOnItemLongClickListener() {@Overridepublic void OnItemLongClickListener(View view, int position) {/*长按删除*/list.remove(position);adapter.notifyItemRemoved(position);}});}/*** 初始化集合,添加数据*/private void initData() {list = new ArrayList<>();for (int i = 0; i < 100; i++) {list.add("id:" + i);}}}
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、简洁版1.定义一个接口publicinterfaceMyOnItemClickListener { void OnItemClickListener(View view,int position);}2.适配器中添加:privateMyOnItemClickListeneritemClickListener;public voidsetOnItemClickListener(MyOnItemClickListener itemClickListener) { this.itemClickListener= itemClickListener;}3.适配器onBindViewHolder中添加:if(itemClickListener!=null) { holder.itemView.setOnClickListener(newView.OnClickListener() { @Override public voidonClick(View view) { itemClickListener.OnItemClickListener(holder.itemView,holder.getLayoutPosition()); } });}HomeAdapter2.this.setOnItemClickListener(newMyOnItemClickListener() { @Override public voidOnItemClickListener(View view,intposition) { Toast.makeText(context,"er",Toast.LENGTH_LONG).show(); }});
相关文章推荐
- 接口回调实现RecyclerView的条目点击事件
- Android中Recyclerview使用7----条目中按钮点击事件,在activity中调用(接口回调)
- RecyclerView的点击事件添加-------接口回调的形式添加
- RecyclerView的分割线+回调接口的点击事件(点击事件+长按的点击事件)
- RecycleView条目点击事件的实现 接口回调
- RecyclerView的基本用法 (一个控件实现ListView, GridView等效果)+接口回调点击事件
- RecyclerView 实现瀑布流及点击事件,含点击回调的接口
- Recyclerview条目的点击回调
- recyclerview点击条目事件
- AndroidStudio GradView在RecyclerView中设置条目(Item)点击事件
- RecyclerView 初次体验,实现增加删除条目及item长按和点击事件
- Recyclerview实现瀑布流布局及条目的点击事件
- RecyclerView的基本使用(优化图片加载、设置条目间距、设置Adapter、设置点击事件等)
- 详解Android中回调机制与RecyclerView的Item点击事件实现
- RecyclerView展示固定数据、上拉加载更多、下拉刷新、点击事件、长按点击事件、删除条目、刷新条目、添加条目、多条目加载
- 安卓中RecyclerView的简单使用和自定义RecyclerView的接口点击监听事件
- 安卓自定义控件(View)(二)之接口回调机制实现TopBar的点击事件(从新手角度出发)
- recyclerview单击事件和多条目点击事件
- RecyclerView实现分割线、点击事件、条目加载动画
- Android中使用回调接口实现自定义view的点击事件