我正在尝试创建一个显示文件夹中照片缩略图的应用。我正在使用GridView来达到这个目的。我已经能够成功创建视图并用图像填充它。但是,当我尝试实现上下文菜单选项来删除所选照片时,我得到ResourcesNotFoundException。
在下面的代码中,我指出了错误发生的确切位置。任何指针都将非常感激。
谢谢!
乔
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.photos);
this.gridView = (GridView) findViewById(R.id.gridView);
imageArrayAdapter = new ImageArrayAdapter(this, R.layout.thumb_item, photosList);
this.gridView.setAdapter(imageArrayAdapter);
registerForContextMenu(gridView);
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
menu.setHeaderTitle("File Options");
menu.add(Menu.NONE, 1, Menu.NONE, R.string.delete).
setIcon(R.drawable.delete).
setAlphabeticShortcut('d');
}
@Override
public boolean onContextItemSelected(MenuItem item) {
try {
AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();
// Works correctly
Toast.makeText(this, item.getId(), Toast.LENGTH_SHORT).show();
// Causes ResourcesNotFoundException
Toast.makeText(this, item.getId(), Toast.LENGTH_SHORT).show();
// Works well, prints false
Toast.makeText(this, "" + (info == null), Toast.LENGTH_SHORT).show();
// Causes ResourcesNotFoundException
Toast.makeText(this, info.position, Toast.LENGTH_SHORT).show();
} catch(Exception ignore) {
Log.e("onContextItemSelected", ignore);
}
return(super.onOptionsItemSelected(item));
}
答案 0 :(得分:0)
听起来Toast正在引发资源异常,因为您传递的ID(item.getId()或info.position)不是R数组中的有效字符串资源。
ContextMenu.add()的原型是:
add(int groupId, int itemId, int order, int titleRes)
所以你将“itemId”设置为1,然后尝试使用相同的id作为字符串资源ID。
您可以将itemId与所有菜单项中的标题资源ID相同 - 例如:
add(Menu.NONE, R.string.delete, Menu.NONE, R.string.delete);
我不认为这会被推荐,因为它会混淆两种不同类型的ID - 菜单项选择ID和字符串资源ID。
相反,您可以在侦听器中为菜单项和switch()设置单独的ID空间,选择适当的字符串资源ID或您需要选择的其他操作。
如果你需要的只是项目的文本,或者在你的监听器中使用MenuItem.getTitle()。