为RecycleView添加ContextMenu支持

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


首先,创建一个类继承RecyclerView并去实现支持上下文菜单的方法:
1.public AdapterView.AdapterContextMenuInfo getContextMenuInfo()
2.public boolean showContextMenuForChild(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);


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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值