java - 回收器适配器中菜单的 setOnMenuItemClickListener

标签 java android android-recyclerview popupmenu

感谢您考虑到我的出版物,我可以在回收站的 View 中实现一个带有元素的菜单,但是我的问题是访问菜单项的点击事件,我已经看到他们从 Activity 中做到了,但我有搜索信息以在回收器适配器中执行此操作,但我找不到任何东西。我必须补充一点,我已经实现了它,但即使这样我得到一个错误,我希望你能告诉我我做错了什么或实现它的正确方法。

public class ViewHolderPedido extends RecyclerView.ViewHolder implements View.OnClickListener, PopupMenu.OnMenuItemClickListener {

        @BindView(R.id.txtNumeroPedido)
        TextView txtNumeroPedido;
        @BindView(R.id.txtFechaPedido)
        TextView txtFechaPedido;
        @BindView(R.id.txtSubTotalPedido)
        TextView txtSubTotal;
        @BindView(R.id.txtEstadpoPedidoList)
        TextView txtEstadoPedido;
        @BindView(R.id.txtNombreProductoPedidoList)
        TextView txtNombreProduct;
        @BindView(R.id.imgProductoPedidoList)
        ImageView imgProducto;
        @BindView(R.id.menu)
        ImageView mImgMenu;
        @BindView(R.id.content_order)
        LinearLayout mContentOrder;

        PopupMenu popupMenu;
        PedidoModelo pedidoModelo;

        @Override
        public void onClick(View view) {
            switch (view.getId()) {
                case R.id.menu:
                    popupMenu = new PopupMenu(mContext, view);
                    popupMenu.getMenuInflater().inflate(R.menu.menu_cancel, popupMenu.getMenu());
                    popupMenu.show();
                    break;
                case R.id.content_order:
                    mListener.OnItemClick(view, pedidoModelo, getAdapterPosition(), true);
                    break;
            }
        }

        @Override
        public boolean onMenuItemClick(MenuItem menuItem) {
            return false;
        }

        public ViewHolderPedido(View itemView) {
            super(itemView);
            ButterKnife.bind(this, itemView);
            mImgMenu.setOnClickListener(this);
            mContentOrder.setOnClickListener(this);
            popupMenu.setOnMenuItemClickListener(this);
        }

        protected void bind(PedidoModelo model) {
            this.pedidoModelo = model;

            txtFechaPedido.setText(pedidoModelo.getFecha());
            txtSubTotal.setText(PrecioFormater.formatoPrecio(pedidoModelo.getPrecioTotal()));
            txtNumeroPedido.setText(pedidoModelo.getNumeroOrden());
            txtEstadoPedido.setText(pedidoModelo.getEstado());
            txtNombreProduct.setText(pedidoModelo.getNombreProducto());
            Picasso.with(mContext).load(pedidoModelo.getUrlImagen()).into(imgProducto);
            switch (pedidoModelo.getCodigo_estado()) {
                case OrderStatus.PENDING:
                    mImgMenu.setVisibility(View.VISIBLE);
                    break;
                case OrderStatus.COMPLETE:
                    mImgMenu.setVisibility(View.VISIBLE);
                    break;
            }
        }
    }

    public interface OnItemClickListener {

        boolean OnItemClick(View view, PedidoModelo item, int position, boolean longPress);

    }
}

加载回收站时出现此错误
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.PopupMenu.setOnMenuItemClickListener(android.widget.PopupMenu$OnMenuItemClickListener)' on a null object reference

最佳答案

我找到了我的解决方案,碰巧我在构造函数中声明了 setOnMenuItemClickListener 方法,这是在加载菜单时实例化它时要做的正确事情。在这里我留下解决方案。

@Override
        public void onClick(View view) {
            switch (view.getId()) {
                case R.id.menu:
                    popupMenu = new PopupMenu(mContext, view);
                    popupMenu.getMenuInflater().inflate(R.menu.menu_cancel, popupMenu.getMenu());
                    popupMenu.setOnMenuItemClickListener(this);
                    popupMenu.show();
                    break;
                case R.id.content_order:
                    mListener.OnItemClick(view, pedidoModelo, getAdapterPosition(), true);
                    break;
            }
        }

como se ve el metodo ya esta declarado Correctamente。 me ayudo el post que me pasaron sobre como fixear los 空指针

What is a NullPointerException, and how do I fix it?

关于java - 回收器适配器中菜单的 setOnMenuItemClickListener,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53874205/

相关文章:

java - 来自另一个属性的属性占位符位置

java - 数字文字

android - 在 build.gradle 文件中添加 buildFeatures 时出错

android - 从 RecyclerView 获取 EditTexts 值

java - 滚动 RecyclerView 时出现滞后/错误的 y 坐标(OnscrollListener)

android - layoutmanager.FindFirstCompletelyVisibleItemPosition 总是返回 -1

Java日期奇怪

java - 简单的 Java Bank Atm 登录循环错误

java - Android-Image-Cropper 转圈

android - 如何在 android 应用程序中从 facebook sdk 获取电子邮件 ID?