触及问题here,我想知道为动态创建的弹出菜单项创建资源ID的可行性。
一点背景:我的弹出菜单除了包含给定目录中找到的每个文件的项目外,还包含一个“创建新文件”项。问题;因为我不知道在启动应用程序时目录中存在多少文件,所以我无法在我的xml文件中对这些菜单项进行硬编码,因此它们没有资源ID。我需要为弹出菜单中的项目分配资源ID,以便我可以从单个项目的资源ID创建一个View变量,即:
View menuItemView = getActivity().getWindow().getDecorView().findViewById(R.id.item_id);
I see一个重载版本的getMenu()。add()接受itemID作为参数。我可以在运行时使用int设置此参数,然后将其作为资源ID引用到上面的目的吗?
这是我完整的弹出菜单代码,展示了我动态生成菜单项的方式:
popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
switch (item.getItemId()) {
case R.id.new_track:
trackSelectButton.setText("...");
Toast.makeText(getActivity(), "Name your new track.", Toast.LENGTH_SHORT).show();
txtTrackName.setVisibility(txtTrackName.VISIBLE);
return true;
default:
selectedTrackName = (item.getTitle().toString());
trackSelectButton.setText(selectedTrackName);
for (int i = 0; i < trackListing.length; i++) { //add a menu item for each existing track
if (trackListing[i].getName().equals(selectedTrackName)) {
selectedTrack = trackListing[i];
AudioRecorder.setFile(selectedTrack);
}
}
return true;
}
}
});
MenuInflater popupInflater = popup.getMenuInflater();
popupInflater.inflate(R.menu.popup_menu_track_selection, popup.getMenu());
popup.show();
如何为弹出菜单项动态生成资源ID? (也就是在没有xml文件的情况下分配资源ID)