有什么方法可以在 Recycler 视图中使用的 Card 视图上实现保持侦听器?

Is there any way to achieve a hold listener on a Card view which is used in a Recycler view?

我正在尝试实现一个选项菜单,如果用户按住卡片视图或按下设置按钮,该菜单将悬停在卡片视图上。我尝试实现的菜单应该如下所示:

我已经设置好了,回收站视图的适配器,按下设置按钮会打开弹出窗口,这会打开一个带有选项的小弹出窗口。但是,我正在努力实现它更像是附加到卡片视图,而不是带有选择的新 window。

@Override
    public void onBindViewHolder(NotesHolder holder, int position) {
        if (!mCursor.moveToPosition(position)) {
            return;
        }

        String noteT = mCursor.getString(mCursor.getColumnIndex(NotesDbAdapter.COL_TITLE));
        String noteC = mCursor.getString(mCursor.getColumnIndex(NotesDbAdapter.COL_CONTENT));

        holder.noteTitle.setText(noteT);
        holder.noteDescription.setText(noteC);
        holder.cardView.setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View view) {
                return false;
            }
        });
        holder.noteCard_settingsButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Toast.makeText(mCtx,"The position is:"+position,Toast.LENGTH_SHORT).show();
                PopupMenu popup = new PopupMenu(mCtx, view);
                MenuInflater inflater = popup.getMenuInflater();
                NotesDbAdapter mDbAdapter;
                mDbAdapter = new NotesDbAdapter(mCtx);
                mDbAdapter.open();
                inflater.inflate(R.menu.menu_popup, popup.getMenu());
                popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
                    @Override
                    public boolean onMenuItemClick(MenuItem item) {
                        switch (item.getItemId()) {
                            case R.id.popup_edit:
                                Toast.makeText(mCtx,"You pressed edit note", Toast.LENGTH_SHORT).show();
                                return true;
                            case R.id.popup_delete:
                                mDbAdapter.deleteNoteById(position+1);
                                notifyDataSetChanged();
                                Toast.makeText(mCtx,"You pressed delete note", Toast.LENGTH_SHORT).show();
                                return true;
                        }
                        return false;
                    }
                });
                popup.show();
            }
        });
public class NotesHolder extends RecyclerView.ViewHolder{
    public TextView noteTitle;
    public TextView noteDescription;
    public CardView cardView;
    public Button noteCard_settingsButton;

    public NotesHolder(View view) {
        super(view);
        noteTitle = view.findViewById(R.id.note_titleView);
        noteDescription = view.findViewById(R.id.note_contentView);
        cardView = view.findViewById(R.id.notes_cardView);
        noteCard_settingsButton = view.findViewById(R.id.note_card_settings_button);
    }
}

这段代码有效,请不要误会我的意思,但我只是想知道是否有办法实现与我所附图像类似的东西。

按照我的方式应该相当简单。

默认情况下,只需将自定义选项视图隐藏在 cardview 项目的顶部。 并在卡片视图上长按时显示选项视图。

为什么过于复杂?

请注意我说的是自定义选项视图。 意思是,不是膨胀菜单,而是把它放在 XML 里面。 希望它在某种程度上有所帮助。 干杯!