Контекстное меню не работает в представлении переработчика - PullRequest
0 голосов
/ 25 июня 2018

Я пытаюсь добавить контекстное меню в окне рециркуляции, но оно не работает. в моем адаптере я добавил следующее

  public class ViewHolder extends RecyclerView.ViewHolder implements 
   View.OnCreateContextMenuListener {
    TextView mTitle, mDescription;

    public ViewHolder(View itemView) {
        super(itemView);
        mTitle = itemView.findViewById(R.id.textViewTitle);
        mDescription = itemView.findViewById(R.id.textViewDescription);
        itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                int position = getAdapterPosition();
                String title = mTitle.getText().toString();
                String descrpition = mDescription.getText().toString();
                if (mClickListener!=null)
                    mClickListener.onItemClick(v, position, title, descrpition);
            }
        });
        itemView.setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View v) {
                int position = getAdapterPosition();
                if (onRecyclerViewLongClickListner!=null)
                    onRecyclerViewLongClickListner.onItemLongClick(position);
                return true;
            }
        });
        itemView.setOnCreateContextMenuListener(this);
    }

    @Override
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
        menu.setHeaderTitle("Select options");
        menu.add(0,v.getId(),0,"Option1");
    }
}

и в mainActivity я добавил registerForContextMenu(recyclerView);

1 Ответ

0 голосов
/ 25 июня 2018

Проблема на вашем OnLongClickListener . Это поглощающее длинное событие клика, когда вы возвращаете true.

С onLongClick документация по методу:

true, если обратный вызов потреблял длинный щелчок, иначе false.

Так как вам нужно создать ContextMenu в onLongClick, вы должны вернуть false из вашего OnLongClickListener, чтобы система могла создать ContextMenu.

Обновите свой OnLongClickListener

  itemView.setOnLongClickListener(new View.OnLongClickListener() {
        @Override
        public boolean onLongClick(View v) {
            int position = getAdapterPosition();
            if (onRecyclerViewLongClickListner!=null)
                onRecyclerViewLongClickListner.onItemLongClick(position);
              return false;
        }
    });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...