//点击弹出PopupMenu事件
companyInfoAdapter.itemOnLongClick(new CompanyInfoAdapter.onRecyclerViewItemOnLongClick() {
@Override
public void itemOnLongClick(LinearLayout linearLayout) {
final PopupMenu mPopupMenu = new PopupMenu(CompanyActivity.this, linearLayout);
mPopupMenu.getMenuInflater().inflate(R.menu.menu, mPopupMenu.getMenu());
try {
//PopupMenu显示位置为鼠标点击位置
Field mPopup = mPopupMenu.getClass().getDeclaredField("mPopup");
mPopup.setAccessible(true);
Object o = mPopup.get(mPopupMenu);
Method show = o.getClass().getMethod("show", int.class, int.class);
int[] position = new int[2];
//获取view在屏幕上的坐标
linearLayout.getLocationInWindow(position);
x = (x - position[0]);
y = (y - position[1] - linearLayout.getHeight());
show.invoke(o, x, y);
} catch (NoSuchFieldException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
} finally {
mPopupMenu.show();
}
//PopupMenu中item的点击事件
mPopupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
switch (item.getItemId()) {
case R.id.exit:
ToastUtil.showToast(mContext, "see more");
case R.id.set:
ToastUtil.showToast(mContext, "login out");
}
return false;
}
});
}
});
menu.xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/exit"
android:title="see more" />
<item
android:id="@+id/set"
android:title="loginOut" />
</menu>