如果没有 onBindViewHolder 内的锚点,则不能使用 MenuPopupHelper

MenuPopupHelper cannot be used without an anchor inside onBindViewHolder

单击菜单图标时出现此错误:

java.lang.IllegalStateException: MenuPopupHelper cannot be used without an anchor

我有这个代码:

@Override
    public void onBindViewHolder(final ViewHolder holder, final int position) {

...

holder.imageButtom.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                showPopup(holder.imageButtom, position, post.getPid());
            }
        });

和显示弹出窗口

private void showPopup(View view, final int position, final String id) {
    View menuItemView = view.findViewById(R.id.card_view);
    PopupMenu popup = new PopupMenu(context, menuItemView);
    MenuInflater inflate = popup.getMenuInflater();
    inflate.inflate(R.menu.cardview_menu, popup.getMenu());
    popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
        @Override
        public boolean onMenuItemClick(MenuItem item) {
            switch (item.getItemId()) {
                case R.id.delete_id:
                    Posts.remove(position);
                    notifyItemRemoved(position);
                    // do what you need.
                    break;
                default:
                    return false;
            }
            return false;
        }
    });
    popup.show();
}

知道为什么当我点击我的图片按钮时出现这个错误吗?

我假设您在调用 showPopup(View view, final int position, final String id) 时传错了 View。调用 showPopup 后,您将找到一个特定的视图 ID,即 R.id.card_view 和此

View menuItemView = view.findViewById(R.id.card_view);

并且您通过传递 ImageButton 本身来调用它

showPopup(holder.imageButtom, position, post.getPid());

我猜这是问题的根本原因。我认为您打算传递不同的视图,其中包含您在 showPopup.

中查看的卡片视图 (R.id.card_view)