【发布时间】:2021-09-24 17:27:38
【问题描述】:
我有一个回收站视图和卡片视图。卡片布局有 3 个点,点击后会显示弹出菜单。一切正常,但有一个小问题。如果我单击顶部卡片,弹出菜单将显示在回收站视图的底部。如果我单击中间卡,弹出菜单将显示在活动的左上角,依此类推。我想要的是,如果按下 card_1 的弹出菜单,它应该显示在 card_1 上,同样,弹出菜单应该显示在它们各自的卡片上。我不知道问题出在哪里。请帮忙!!!
这里是菜单布局 menu_options.xml
<?xml version="1.0" encoding="utf-8"?>
<item
android:id="@+id/menu1"
android:title="Edit " />
<item
android:id="@+id/menu2"
android:title="Delete " />
这是显示菜单的方法。它在用于我的回收站视图的 CardViewAdapter 中。
@Override
public void onBindViewHolder(final ViewHolder holder, final int position) {
...
threeDots = (TextView)cardView.findViewById(R.id.options);
threeDots.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
PopupMenu popupMenu = new PopupMenu(context, threeDots);
popupMenu.inflate(R.menu.menu_options);
popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener(){
@Override
public boolean onMenuItemClick(MenuItem item) {
switch (item.getItemId()){
case R.id.menu1: int pos = holder.getAdapterPosition();
onEdit(pos);
break;
case R.id.menu2: Toast.makeText(context, "Swipe LEFT to delete the card", Toast.LENGTH_LONG)
.show();
break;
}
return false;
}
});
popupMenu.show();
}
});
}
【问题讨论】:
-
developer.android.com/reference/android/widget/PopupMenu 使用您的视图 (holder.view?) 作为锚点和重心或顶部 |离开
-
如果
threeDots是Adapter类中的一个字段,那么它不太可能指向被点击项目的右侧View。将您的锚点更改为传递给onClick()的View,因为那肯定是当前点击的View。即改为new PopupMenu(context, view)。 -
当我在新的 PopuoMenu(context, holder.threeDots) 中通过 holder.threeDots 时,holder 无法识别 threeDots 并给出错误。你能告诉我我该怎么做吗? - 迈克 M
-
这不是我的建议。我说使用
View传入onClick();即new PopupMenu(context, view). -
喜欢 holder.cardView?。就这样
标签: android android-recyclerview popupmenu