nat*_*iyu 2 android listview popupmenu
我创建了ListView一个PopupMenu在每个项目中都有一个.我创建了一个menu layout并将其用作我的PopupMenu.我的问题是每次我点击我的项目的椭圆选项时ListView的PopupMenu显示有Text,但Icon没有显示出来.
这是我的xml菜单:
<menu
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/action_retry"
android:icon="@drawable/retry"
android:title="@string/retry"
app:showAsAction="always"
/>
<item
android:id="@+id/action_delete"
android:icon="@drawable/delete"
android:title="@string/delete"
app:showAsAction="always"
/>
</menu>
Run Code Online (Sandbox Code Playgroud)
然后在我Adapter的我ListView是这样的:
public class MyListViewAdapter extends BaseAdapter implements MenuItem.OnMenuItemClickListener {
.....
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
if (convertView == null) {
LayoutInflater inflater = activity.getLayoutInflater();
convertView = inflater.inflate(R.layout.mylistrow, null);
}
final View action = (View) convertView.findViewById(R.id.action);
action.setOnClickListener(new View.OnClickListener(){
public void onClick(View v) {
showPopup(action, position);
}
});
// ....codes for listview creation....
return convertView;
}
public void showPopup(View v, int listItemPosition) {
PopupMenu popup = new PopupMenu(mContext, v);
MenuInflater inflater = popup.getMenuInflater();
inflater.inflate(R.menu.outbox_menu, popup.getMenu());
popup.show();
}
@Override
public boolean onMenuItemClick(MenuItem item) {
switch (item.getItemId()) {
case R.id.action_retry:
return true;
case R.id.action_delete:
return true;
default:
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
提前感谢您的帮助.
Jar*_*ler 10
这MenuBuilder是一个隐藏的类,但确实包含一个显示图标的方法。您将需要使用反射来显示菜单中的图标。尝试将其添加到showPopop(View, int):
PopupMenu popup = new PopupMenu(mContext, v);
try {
Method method = popup.getMenu().getClass().getDeclaredMethod("setOptionalIconsVisible", boolean.class);
method.setAccessible(true);
method.invoke(popup.getMenu(), true);
} catch (Exception e) {
e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
我在此链接中找到了一个解决方案并将其应用于我的代码.
PopupMenu popup = new PopupMenu(mContext, view);
try {
Field[] fields = popup.getClass().getDeclaredFields();
for (Field field : fields) {
if ("mPopup".equals(field.getName())) {
field.setAccessible(true);
Object menuPopupHelper = field.get(popup);
Class<?> classPopupHelper = Class.forName(menuPopupHelper.getClass().getName());
Method setForceIcons = classPopupHelper.getMethod("setForceShowIcon", boolean.class);
setForceIcons.invoke(menuPopupHelper, true);
break;
}
}
} catch (Exception e) {
e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2245 次 |
| 最近记录: |