怎样长按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上搜个成熟的轮子,直接用