I have a Listview with a ContextMenu, but when I setIcon for ContextMenu look like it doesn\'t work
public void onCreateContextMenu(ContextMenu menu , View v
I did it by this way:
Reference screenshot:
menu_patient_language.xml
style.xml:
private void showPopup(View v) {
Context wrapper = new ContextThemeWrapper(this, R.style.popupMenuStyle);
PopupMenu mypopupmenu = new PopupMenu(wrapper, v);
setForceShowIcon(mypopupmenu);
MenuInflater inflater = mypopupmenu.getMenuInflater();
inflater.inflate(R.menu.menu_patient_language, mypopupmenu.getMenu());
mypopupmenu.show();
// mypopupmenu.getMenu().getItem(0).setIcon(getResources().getDrawable(R.mipmap.ic_launcher));
mypopupmenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
txtPreferredLanguage.setText(item.getTitle().toString());
switch (item.getItemId()) {
case R.id.menuEnglish:
// Your code goes here
break;
case R.id.menuFrench:
// Your code goes here
break;
}
return false;
}
});
}
private void setForceShowIcon(PopupMenu popupMenu) {
try {
Field[] mFields = popupMenu.getClass().getDeclaredFields();
for (Field field : mFields) {
if ("mPopup".equals(field.getName())) {
field.setAccessible(true);
Object menuPopupHelper = field.get(popupMenu);
Class> popupHelper = Class.forName(menuPopupHelper.getClass().getName());
Method mMethods = popupHelper.getMethod("setForceShowIcon", boolean.class);
mMethods.invoke(menuPopupHelper, true);
break;
}
}
} catch (Throwable e) {
e.printStackTrace();
}
}
Hope this would help you sure.
Done