I've been trying to make a context menu for RecyclerView for a week already. I rewrote the code from ListView to RecyclerView from CardView and now I have not tried what instructions, but the context menu does not work. I think the problem is in the RecyclerView and the holder. I'll post all the class code, please, who has time, inspect and express your assumptions. Scrolling with cardview works!
public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.ViewHolder> { private static final String TAG = "MainActivity"; private ArrayList<String> mDataset; public static class ViewHolder extends RecyclerView.ViewHolder implements View.OnCreateContextMenuListener, View.OnClickListener, MenuItem.OnMenuItemClickListener{ public TextView mTextView; public ViewHolder(View v) { super(v); mTextView = (TextView) v.findViewById(R.id.tv_recycler_item); v.setOnCreateContextMenuListener(this); } @Override public void onClick(View v) { Log.d(TAG,"onClick"); } @Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) { MenuItem myActionItem = menu.add("Some menu item"); myActionItem.setOnMenuItemClickListener(this); menu.setHeaderTitle("Select The Action"); menu.add(0, v.getId(), 0, "Call");//groupId, itemId, order, title menu.add(0, v.getId(), 0, "SMS"); Log.d(TAG,"onCreate"); } @Override public boolean onMenuItemClick(MenuItem item) { Log.d(TAG,"ItemClick"); return false; } } public RecyclerAdapter(ArrayList<String> dataset) { mDataset = dataset; } @Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View v = LayoutInflater.from(parent.getContext()) .inflate(R.layout.recycler_item, parent, false); ViewHolder vh = new ViewHolder(v); return vh; } @Override public void onBindViewHolder(final ViewHolder holder, int position) { holder.mTextView.setText(mDataset.get(position)); } @Override public int getItemCount() { return mDataset.size(); } public void onClick(View view) { Log.d(TAG,"onClick "); } }