Android:为弹出菜单项动态分配资源ID

时间:2016-06-10 02:33:21

标签: android xml menu popup

触及问题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)

1 个答案:

答案 0 :(得分:0)

您考虑过View.generateViewId()了吗?和setId(int)

请参阅this answer