PopupMenu onitemclick not working android



我在回收站视图中创建了一个弹出式菜单,如下图所示。我改变了弹出式菜单的样式,使用ContextThemWrapper设置文本颜色,但是,从那时起,弹出式菜单项单击侦听器不起作用。请注意,我使用androidx.appcompat.view.ContextThemeWrapper包的ContextThemeWrapper

Context wrapper = new ContextThemeWrapper(ctx1, R.style.popupMenuStyle);

final PopupMenu popup = new PopupMenu(wrapper, viewHolder.overflow_bt);
MenuInflater inflater = popup.getMenuInflater();
final Menu pop = popup.getMenu();


popup.setOnMenuItemClickListener
(new PopupMenu.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(final MenuItem item) {


switch (item.getItemId()) {
case R.id.delete:
//handle menu1 click
Delete_post(post_key);
break;

case R.id.edit:

Intent intent = new Intent(ctx1, EditPost.class);
tartActivity(intent);

break;

}


return false;
}
});
popup.show();

}
});

Styles.xml

<style name="AppTheme" parent="Theme.AppCompat.NoActionBar">

<item name="android:popupMenuStyle">@style/popupMenuStyle</item>
<item name="textAppearanceLargePopupMenu">@style/myLargePopupMenuTextAppearanceColor</item>
<item name="textAppearanceSmallPopupMenu">@style/mySmallPopupMenuTextAppearanceColor</item>
<item name="android:itemBackground">@color/colorAccent</item>
</style>
<style name="popupMenuStyle" parent="Widget.AppCompat.PopupMenu">
<item name="android:popupBackground">@color/colorAccent</item>
<item name="android:textColor">@color/blackPrimary</item>

</style>
<style name="mySmallPopupMenuTextAppearanceColor" parent="@style/TextAppearance.AppCompat.Light.Widget.PopupMenu.Small">
<item name="android:textColor">@color/blackPrimary</item>
<item name="android:textColorPrimaryDisableOnly">@color/white</item>
</style>
<style name="myLargePopupMenuTextAppearanceColor" parent="@style/TextAppearance.AppCompat.Light.Widget.PopupMenu.Large">
<item name="android:textColor">@color/blackPrimary</item>
<item name="android:textColorPrimaryDisableOnly">@color/white</item>
</style>

由于公共布尔onMenuItemClick(最终MenuItem项)总是返回false,您的弹出式菜单onitemclick不会工作。您需要返回true,以使您的弹出式菜单itemclick工作。这样做:

@Override
public boolean onMenuItemClick(final MenuItem item) {


switch (item.getItemId()) {
case R.id.delete:
//handle menu1 click
Delete_post(post_key);
return true;

case R.id.edit:

Intent intent = new Intent(ctx1, EditPost.class);
tartActivity(intent);

return true;

default: return false;

}
}
});
popup.show();

我认为问题是你没有膨胀你的弹出式菜单:在MenuInflater行下面添加这一行:

inflater.inflate(R.menu.your_menu_id);

最新更新