代码之家  ›  专栏  ›  技术社区  ›  dbenitobaldeon

回收器适配器中菜单的setOnMenuItemClickListener

  •  0
  • dbenitobaldeon  · 技术社区  · 6 年前

    感谢您考虑到我的出版物,我可以实现一个在回收器视图中包含元素的菜单,但是我的问题是访问菜单项的click事件,我已经看到它们是从活动中执行的,但是我已经在回收器适配器中搜索了执行该操作的信息,我找不到任何内容。我必须补充说,我已经实现了,但即使这样,我得到了一个错误,我希望你能告诉我我做错了什么或正确的方法来实现它。

    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
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   dbenitobaldeon    6 年前

    @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;
                }
            }
    

    这是我的纠正声明。我是一个空指针

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