前几天想用contextMenu来实现recyclerview中的批量删除的功能,于是去官网找了找contextMenu是使用方法,通过registerForContextMenu(View v)注册了contextmenu后,发现onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo)没有被调用。
上网找了找,发现可以在ViewHolder中实现ContextMenu,通过给RecyclerView中的每个Item设置监听器创建菜单,贴出例子如下:
private class myHolder extends RecyclerView.ViewHolder{
public myHolder(View itemView){
super(itemView);
title = (TextView) itemView.findViewById(R.id.list_item_title);
date = (TextView) itemView.findViewById(R.id.list_item_date);
mCheckBox = (CheckBox) itemView.findViewById(R.id.checkbox);
itemView.setOnCreateContextMenuListener(new View.OnCreateContextMenuListener() {
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
MenuInflater inflater = getActivity().getMenuInflater();
MenuItem delete = menu.add(Menu.NONE, 1, 1, "删除");
MenuItem delete_much = menu.add(Menu.NONE, 2, 2, "批量删除");
delete.setOnMenuItemClickListener(listener); //响应点击事件
delete_much.setOnMenuItemClickListener(listener);
Log.e(TAG, "in context menu");
}
});
MenuItem.OnMenuItemClickListener listener=new MenuItem.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) { //设置每个菜单的点击动作
switch (item.getItemId()){
case 1:
//do something
return true;
case 2:
//do something
default:
return true;
}
}
};
});
}
另外我发现在如果已经通过registerForContextMenu(View v)方法注册过菜单的,并且重写了onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo)方法,那么当点击的时候俩个方法都会被执行。