隐藏菜单项而不会使菜单布局膨胀

时间:2013-02-26 18:15:41

标签: android android-contextmenu

我曾经这样做过:

menu.setHeaderTitle("Available Actions");

            android.view.MenuItem Edit = menu.findItem(R.id.edit);
            android.view.MenuItem Delete = menu.findItem(R.id.delete);

            AdapterContextMenuInfo info = (AdapterContextMenuInfo) menuInfo;

            int position = info.position;
            ListView lv = (ListView) v;
            int firstVisible = lv.getFirstVisiblePosition();
            View rowView = lv.getChildAt(position - firstVisible);

            if (Rateit.isUserLoggedIn == true) {
                 {

                    Edit.setVisible(true);
                    Delete.setVisible(true);

                } else {
                    Edit.setVisible(false);
                    Delete.setVisible(false);
                }
            } else {
                Edit.setVisible(false);
                Delete.setVisible(false);
            }

现在菜单是通过NOT膨胀布局设置的,但是这个:

menu.add(2, 1, 0, "Edit");
menu.add(2, 2, 0, "Delete");

但是,我找不到将itemIdadd方法中的第二个参数)分配给Edit / Delete所需的方法,以便我可以设置它们可见与否?有谁知道怎么做?

2 个答案:

答案 0 :(得分:2)

menu.add如果您将其保存到变量中,则会返回MenuItem,然后您可以更改其菜单的可见性,例如

MenuItem edit = menu.add(2, 1, 0, "Edit");
MenuItem delete = menu.add(2, 2, 0, "Delete");
edit.setVisible(Rateit.isUserLoggedIn);
delete.setVisible(Rateit.isUserLoggedIn);

如果您以后不需要访问菜单项,也可以将调用链接在一起

menu.add(2, 1, 0, "Edit").setVisible(Rateit.isUserLoggedIn);
menu.add(2, 2, 0, "Delete").setVisible(Rateit.isUserLoggedIn);

答案 1 :(得分:2)

add()返回一个MenuItem,只需保存此值即可随时显示/隐藏它。

MenuItem edit = menu.add(2, 1, 0, "Edit");
// Do with "edit" as you please

另请阅读Java naming conventions,其中指出变量(如edit)应以小写字母开头。