为RecycleView添加ContextMenu支持

最近实现了如下的长按删除功能,运用了上下文菜单,在ListView和GrideView上运用正常,但是在RecyclerView上就不行了(可以弹出上下文菜单,但是点击菜单item会报空指针异常:MenuInfo为null),上网一顿搜索,才知道RecyclerView没有实现对ContextMenu的支持,那只好自己去实现了。

为RecycleView添加ContextMenu支持
为RecycleView添加ContextMenu支持
为RecycleView添加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);
    }
}

为RecycleView添加ContextMenu支持
然后,就没有然后啦,直接用就可以了(哈哈哈哈哈,嗝...)
在用到的地方去实现这两个方法就行了:
为RecycleView添加ContextMenu支持
@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);


最后,感谢网上大佬们的分享,贴个参考链接: 此处是参考原文