在Adapter的onBindViewHolder中,添加长按的监听器,记录长按时的位置。 mFriendRecyclerView.setLongClickable(true); 在MainActivity的onCreate()方法中,设置RecyclerView允许响应长按事件。 在MainActivity的ViewHolder的构造函数中,登记上下文菜单。 registerForContextMenu(itemView);
时间: 2024-02-24 18:59:50 浏览: 76
RecyclerView的长按事件和点击事件
根据你提供的上下文,我可以理解你的问题了。下面是我的回答:
在Adapter的onBindViewHolder中,你可以为每个itemView设置长按监听器,记录长按时的位置。你可以在ViewHolder类中定义一个int类型的变量position,用于记录当前ViewHolder所绑定的item在RecyclerView中的位置。然后,为每个itemView设置长按监听器,当长按时记录当前ViewHolder的位置。
```
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
...
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
holder.position = position; // 记录ViewHolder所绑定的item在RecyclerView中的位置
holder.itemView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View view) {
// 处理长按事件,记录当前ViewHolder的位置
int pos = holder.position;
// do something
return true;
}
});
}
...
public class ViewHolder extends RecyclerView.ViewHolder {
int position; // 记录ViewHolder所绑定的item在RecyclerView中的位置
...
}
}
```
在MainActivity的onCreate()方法中,你需要设置RecyclerView允许响应长按事件。
```
public class MainActivity extends AppCompatActivity {
...
private RecyclerView mFriendRecyclerView;
private MyAdapter mAdapter;
...
@Override
protected void onCreate(Bundle savedInstanceState) {
...
mFriendRecyclerView = findViewById(R.id.friend_recycler_view);
mFriendRecyclerView.setLongClickable(true); // 设置RecyclerView允许响应长按事件
...
}
...
}
```
在MainActivity的ViewHolder的构造函数中,你需要登记上下文菜单。当用户长按某个item时,会弹出上下文菜单,你需要在ViewHolder的构造函数中登记上下文菜单。
```
public class MainActivity extends AppCompatActivity {
...
public class MyViewHolder extends RecyclerView.ViewHolder implements View.OnCreateContextMenuListener {
...
public MyViewHolder(View itemView) {
super(itemView);
...
itemView.setOnCreateContextMenuListener(this); // 登记上下文菜单
}
...
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
// 创建上下文菜单
menu.setHeaderTitle("操作");
menu.add(Menu.NONE, 0, 0, "编辑");
menu.add(Menu.NONE, 1, 0, "删除");
}
}
...
}
```
以上就是根据你提供的上下文,我所能够理解的答案。如果还有任何疑问,请随时提出。
阅读全文