怎样长按listview的一个item,弹出上下文菜单,并获取该item的位置和内容?

怎样长按listview的一个item,弹出上下文菜单,并获取该item的位置和内容?就类似于微信长按一个聊天,可以弹出菜单对其进行操作


 listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {//长按监听事件
            @Override
            public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
              //position就是该item的位置
              //这里的strings自己定义哦
              showWindow(strings,view);
            //获取item 的内容  比如获取其中的一个TextView
          TextView tv = view.findViewById(R.id.控件ID);//接着你就能获取内容啦
        //如果你的item是一个实体类那就更更简单了
       A实体类  a = list数据集.get(position);
                return true;
            }
        });
/**
* strings--菜单选项  view--item
*/
private void showWindow(tring[] strings, View view) {
        ListPopupWindow listPopupWindow = new ListPopupWindow(this);
        listPopupWindow.setAdapter(new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, strings));
        listPopupWindow.setAnchorView(view);
        listPopupWindow.setAnimationStyle(R.style.style_pop_animation);//弹出动画
        listPopupWindow.setWidth(300);
        listPopupWindow.setDropDownGravity(Gravity.START);
        listPopupWindow.setModal(true);
        listPopupWindow.setOnItemClickListener((parent, view, position, id) -> {
          //具体菜单按钮操作自己看着实现哦
            listPopupWindow.dismiss();
        });
        listPopupWindow.show();
    }

在 adapter 中定义一个接口,暴露你的点击和长按事件,如下:

    public static interface OnRecyclerViewItemClickListener {
        void onRecyclerViewItemClick(View view, Object item, int position);

        void onRecyclerViewItemLongClick(View view, Object item, int position);
    }

    protected OnRecyclerViewItemClickListener mOnItemClickListener = null;

    public void setOnRecyclerViewItemClickListener(OnRecyclerViewItemClickListener listener) {
        this.mOnItemClickListener = listener;
    }

        viewHolder.itemView.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                if (mOnItemClickListener != null) {
                    mOnItemClickListener.onRecyclerViewItemClick(v, v.getTag(), position);
                }
            }
        });
        viewHolder.itemView.setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View v) {
                if (mOnItemClickListener != null) {
                    mOnItemClickListener.onRecyclerViewItemLongClick(v, v.getTag(), position);
                    return true;
                }
                return false;
            }
        });

弹窗菜单,如果不熟悉,可以github或其他gitee上搜个成熟的轮子,直接用