为RecycleView添加ContextMenu支持
最近实现了如下的长按删除功能,运用了上下文菜单,在ListView和GrideView上运用正常,但是在RecyclerView上就不行了(可以弹出上下文菜单,但是点击菜单item会报空指针异常:MenuInfo为null),上网一顿搜索,才知道RecyclerView没有实现对ContextMenu的支持,那只好自己去实现了。
首先,创建一个类继承RecyclerView并去实现支持上下文菜单的方法:
1.publicAdapterView.AdapterContextMenuInfogetContextMenuInfo()
2.publicbooleanshowContextMenuForChild(View originalView)
/** * Description: 实现内容菜单支持的RecyclerView * Created by Z on 2017/9/14. */ public class RecyclerViewImplementsContextMenu extends RecyclerView { private AdapterView.AdapterContextMenuInfo contextMenuInfo; public RecyclerViewImplementsContextMenu(Context context) { super(context); } public RecyclerViewImplementsContextMenu(Context context, @Nullable AttributeSet attrs) { super(context, attrs); } public RecyclerViewImplementsContextMenu(Context context, @Nullable AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } @Override public AdapterView.AdapterContextMenuInfo getContextMenuInfo() { return contextMenuInfo; } @Override public boolean showContextMenuForChild(View originalView) { int position = getChildAdapterPosition(originalView); long longId = getChildItemId(originalView); contextMenuInfo = new AdapterView.AdapterContextMenuInfo(originalView,position,longId); return super.showContextMenuForChild(originalView); } }
然后,就没有然后啦,直接用就可以了(哈哈哈哈哈,嗝...)
在用到的地方去实现这两个方法就行了:
@Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) { super.onCreateContextMenu(menu, v, menuInfo); getMenuInflater().inflate(R.menu.menu_delecte_content,menu); } @Override public boolean onContextItemSelected(MenuItem item) { doSomething(); return super.onContextIteSelected(item); }
当然,千万千万不要忘记去注册咱们的ContextMenu
registerForContextMenu(View view);
最后,感谢网上大佬们的分享,贴个参考链接:
此处是参考原文