第一个,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() {
@Override
public void onClick(View view) {
itemClickListener.OnItemClickListener(myViewHolder.itemView, myViewHolder.getLayoutPosition());
}
});
}
/*自定义item的长按事件不为null,设置监听事件*/
if (itemLongClickListener != null) {
myViewHolder.itemView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public 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
*/
@Override
public 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
*/
@Override
public 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() {
@Override
public void onClick(View view) {
itemClickListener.OnItemClickListener(myViewHolder.itemView, myViewHolder.getLayoutPosition());
}
});
}
/*自定义item的长按事件不为null,设置监听事件*/
if (itemLongClickListener != null) {
myViewHolder.itemView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View view) {
itemLongClickListener.OnItemLongClickListener(myViewHolder.itemView, myViewHolder.getLayoutPosition());
return true;
}
});
}
}
/**
* 本方法决定了绘制item的数量
*
* @return
*/
@Override
public 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;
@Override
protected 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() {
@Override
public void OnItemClickListener(View view, int position) {
Toast.makeText(getApplicationContext(), "position" + position + "被点击", Toast.LENGTH_SHORT).show();
}
});
/*长按事件*/
adapter.setOnItemLongClickListener(new MyOnItemLongClickListener() {
@Override
public 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.定义一个接口
public
interface
MyOnItemClickListener
{
void
OnItemClickListener(View view,
int
position);}
2.适配器中添加:
private
MyOnItemClickListener
itemClickListener
;
public void
setOnItemClickListener(MyOnItemClickListener itemClickListener) {
this
.
itemClickListener
= itemClickListener;
}
3.适配器
onBindViewHolder中添加:
if
(
itemClickListener
!=
null
) {
holder.
itemView
.setOnClickListener(
new
View.OnClickListener() {
@Override
public void
onClick(View view) {
itemClickListener
.OnItemClickListener(
holder
.
itemView
,
holder
.getLayoutPosition());
}
});
}
HomeAdapter2.
this
.setOnItemClickListener(
new
MyOnItemClickListener() {
@Override
public void
OnItemClickListener(View view,
int
position) {
Toast.
makeText
(
context
,
"er"
,Toast.
LENGTH_LONG
).show();
}
});