用过recyclerview的朋友们都知道,recyclerview不负责item视图的布局以及显示,所以也就没有为item开发点击事件,那么当我们需要对recyclerview的item做点击事件的时候,就只能自己来实现了,我主要是在recyclerview的适配器中设置接口,来实现recyclerview的点击监听,这里我是零时做了一个简单的demo,下面请看代码:
adapter中代码:
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ItemViewHolder>{
//点击
private OnItemClickListener mOnItemClickListener;
//长按
private OnItemLongClickListener mOnItemLongClickListener;
//点击
public void setmOnItemClickListener(OnItemClickListener mOnItemClickListener) {
this.mOnItemClickListener = mOnItemClickListener;
}
//长按
public void setmOnItemLongClickListener(OnItemLongClickListener mOnItemLongClickListener) {
this.mOnItemLongClickListener = mOnItemLongClickListener;
}
private OnItemClickListener mOnItemClickListener;
//长按
private OnItemLongClickListener mOnItemLongClickListener;
//点击
public void setmOnItemClickListener(OnItemClickListener mOnItemClickListener) {
this.mOnItemClickListener = mOnItemClickListener;
}
//长按
public void setmOnItemLongClickListener(OnItemLongClickListener mOnItemLongClickListener) {
this.mOnItemLongClickListener = mOnItemLongClickListener;
}
private Context context;
private List<DetailsBean.ResultBean.DataBean> list;
private List<DetailsBean.ResultBean.DataBean> list;
public MyAdapter(Context context, List<DetailsBean.ResultBean.DataBean> list) {
this.context = context;
this.list = list;
}
this.context = context;
this.list = list;
}
@Override
public ItemViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View inflate = LayoutInflater.from(context).inflate(R.layout.item, parent, false);
ItemViewHolder itemViewHolder=new ItemViewHolder(inflate);
return itemViewHolder;
}
public ItemViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View inflate = LayoutInflater.from(context).inflate(R.layout.item, parent, false);
ItemViewHolder itemViewHolder=new ItemViewHolder(inflate);
return itemViewHolder;
}
@Override
public void onBindViewHolder(final ItemViewHolder holder, int position) {
holder.tv.setText(list.get(position).getContent());
holder.content.setText(list.get(position).getUpdatetime());
public void onBindViewHolder(final ItemViewHolder holder, int position) {
holder.tv.setText(list.get(position).getContent());
holder.content.setText(list.get(position).getUpdatetime());
//判断是否设置了监听器
//单击判断
if(mOnItemClickListener != null){
//为ItemView设置监听器
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int position = holder.getLayoutPosition(); // 1
mOnItemClickListener.onItemClick(holder.itemView,position); // 2
}
});
}
//长按判断
if(mOnItemLongClickListener != null){
holder.itemView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
int position = holder.getLayoutPosition();
mOnItemLongClickListener.onItemLongClick(holder.itemView,position);
//返回true 表示消耗了事件 事件不会继续传递
return true;
}
});
}
//单击判断
if(mOnItemClickListener != null){
//为ItemView设置监听器
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int position = holder.getLayoutPosition(); // 1
mOnItemClickListener.onItemClick(holder.itemView,position); // 2
}
});
}
//长按判断
if(mOnItemLongClickListener != null){
holder.itemView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
int position = holder.getLayoutPosition();
mOnItemLongClickListener.onItemLongClick(holder.itemView,position);
//返回true 表示消耗了事件 事件不会继续传递
return true;
}
});
}
}
@Override
public int getItemCount() {
return list.size();
}
public int getItemCount() {
return list.size();
}
public class ItemViewHolder extends RecyclerView.ViewHolder{
private final TextView tv;
private TextView content;
private TextView content;
public ItemViewHolder(View itemView) {
super(itemView);
tv= (TextView) itemView.findViewById(R.id.tttttt);
content= (TextView) itemView.findViewById(R.id.content);
}
}
super(itemView);
tv= (TextView) itemView.findViewById(R.id.tttttt);
content= (TextView) itemView.findViewById(R.id.content);
}
}
//点击监听接口
public interface OnItemClickListener{
void onItemClick(View view, int position);
}
void onItemClick(View view, int position);
}
//长按监听接口
public interface OnItemLongClickListener{
void onItemLongClick(View view, int position);
}
}
void onItemLongClick(View view, int position);
}
}
activity:
public class MainActivity extends AppCompatActivity {
private PullRecyclerView recycler;
private MyAdapter adapter;
private List<DetailsBean.ResultBean.DataBean> list;
private List<DetailsBean.ResultBean.DataBean> data=new ArrayList<>();
private int urlPage=2;
private MyAdapter adapter;
private List<DetailsBean.ResultBean.DataBean> list;
private List<DetailsBean.ResultBean.DataBean> data=new ArrayList<>();
private int urlPage=2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//初始化控件
recycler= (PullRecyclerView) findViewById(R.id.recycler);
//垂直排列(不设置这个属性,有时会不显示数据)
recycler.setOrientation(LinearLayout.VERTICAL);
/*
* 布局管理器
* LinearLayoutManager(listview展现形式)
* GridLayoutManager(gridview展现形式)
* StaggeredGridLayoutManager(瀑布流展现形式)
* */
recycler.setLayoutManager(new LinearLayoutManager(this));
//网络请求数据
initData(urlPage);
}
recycler= (PullRecyclerView) findViewById(R.id.recycler);
//垂直排列(不设置这个属性,有时会不显示数据)
recycler.setOrientation(LinearLayout.VERTICAL);
/*
* 布局管理器
* LinearLayoutManager(listview展现形式)
* GridLayoutManager(gridview展现形式)
* StaggeredGridLayoutManager(瀑布流展现形式)
* */
recycler.setLayoutManager(new LinearLayoutManager(this));
//网络请求数据
initData(urlPage);
}
private void initData(int page) {
//封装的okhttp工具类的get异步
OkHttp.getAsync("http://japi.juhe.cn/joke/content/list.from?key= 874ed931559ba07aade103eee279bb37 &page="+page+"&pagesize=10&sort=asc&time=1418745237", new OkHttp.DataCallBack() {
//请求失败所做处理(工具类已处理)
@Override
public void requestFailure(Request request, IOException e) {
//封装的okhttp工具类的get异步
OkHttp.getAsync("http://japi.juhe.cn/joke/content/list.from?key= 874ed931559ba07aade103eee279bb37 &page="+page+"&pagesize=10&sort=asc&time=1418745237", new OkHttp.DataCallBack() {
//请求失败所做处理(工具类已处理)
@Override
public void requestFailure(Request request, IOException e) {
}
//请求成功所做处理
@Override
public void requestSuccess(String result) throws Exception {
//解析数据
jieJson(result);
}
});
//请求成功所做处理
@Override
public void requestSuccess(String result) throws Exception {
//解析数据
jieJson(result);
}
});
}
private void jieJson(String res) {
//创建一个Gson对象
Gson gson=new Gson();
//进行解析并放入Bean中
DetailsBean bean=gson.fromJson(res,DetailsBean.class);
//放入集合
list=bean.getResult().getData();
data.addAll(list);
//配置适配器
adapter = new MyAdapter(MainActivity.this,data);
recycler.setAdapter(adapter);
//长按监听
adapter.setmOnItemLongClickListener(new MyAdapter.OnItemLongClickListener() {
@Override
public void onItemLongClick(View view, final int position) {
//定义AlertDialog.Builder对象,当长按列表项的时候弹出确认删除对话框
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
builder.setMessage("确定删除?");
builder.setTitle("提示");
//添加AlertDialog.Builder对象的setPositiveButton()方法
builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
adapter.notifyDataSetChanged();
data.remove(position);
//创建一个Gson对象
Gson gson=new Gson();
//进行解析并放入Bean中
DetailsBean bean=gson.fromJson(res,DetailsBean.class);
//放入集合
list=bean.getResult().getData();
data.addAll(list);
//配置适配器
adapter = new MyAdapter(MainActivity.this,data);
recycler.setAdapter(adapter);
//长按监听
adapter.setmOnItemLongClickListener(new MyAdapter.OnItemLongClickListener() {
@Override
public void onItemLongClick(View view, final int position) {
//定义AlertDialog.Builder对象,当长按列表项的时候弹出确认删除对话框
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
builder.setMessage("确定删除?");
builder.setTitle("提示");
//添加AlertDialog.Builder对象的setPositiveButton()方法
builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
adapter.notifyDataSetChanged();
data.remove(position);
Toast.makeText(getBaseContext(), "删除列表项", Toast.LENGTH_SHORT).show();
}
});
//添加AlertDialog.Builder对象的setNegativeButton()方法
builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
});
//添加AlertDialog.Builder对象的setNegativeButton()方法
builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
});
//Dialog 显示
builder.create().show();
}
});
}
}
});
//Dialog 显示
builder.create().show();
}
});
}
}
本文介绍了如何在RecyclerView中实现Item的点击事件监听。通过在适配器中设置接口,详细展示了实现点击事件的具体代码和步骤。
1937

被折叠的 条评论
为什么被折叠?



