【问题标题】:Popup menu checkable behavior not working弹出菜单可检查行为不起作用
【发布时间】:2020-06-25 18:23:54
【问题描述】:

我有一个这样的菜单资源文件:

<menu xmlns:android="http://schemas.android.com/apk/res/android"
    >
    <group android:checkableBehavior="single">

        <item android:id="@+id/sort_all"
            android:title="All"
            android:orderInCategory="1" />

        <item android:id="@+id/sort_co"
            android:title="CoAuthors"
            android:orderInCategory="2" />

        <item
            android:id="@+id/sort_title"
            android:title="Title"
            android:orderInCategory="3" />
        <item
            android:id="@+id/sort_journal"
            android:title="Journals"
            android:orderInCategory="4" />
        <item
            android:id="@+id/sort_year"
            android:title="Year"
            android:orderInCategory="5" />

    </group>
</menu>

我在弹出菜单上使用它:

        final PopupMenu popup = new PopupMenu(MainActivity.this, btn1);
        //Inflating the Popup using xml file
        popup.getMenuInflater().inflate(R.menu.search_menu, popup.getMenu());

        //registering popup with OnMenuItemClickListener
        popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
            public boolean onMenuItemClick(MenuItem item) {
                switch (item.getItemId()) {

                    case R.id.sort_co:
                        popup.getMenu().findItem(item.getItemId()).setChecked(true);
                        return true;

                    case R.id.sort_title:


                        item.setChecked(true);


                        return true;

                    case R.id.sort_journal:

                        item.setChecked(true);

                        return true;

                    case R.id.sort_year:

                        item.setChecked(true);

                        return true;
                    case R.id.sort_all:

                        item.setChecked(true);

                        return true;


                    default:
                        return true;
                }
            }

        });
        popup.show();
    }
});

如你所见,我尝试过使用

item.setChecked(true)

popup.getMenu().findItem(item.getItemId()).setChecked(true);

但问题是当我在关闭菜单之前单击项目时,项目会被选中,但是当我再次重新打开菜单时,它不会被选中! 我也尝试过使用

MenuItem subMenuItem = item.getSubMenu().getItem(INDEX_OF_ITEM); 
subMenuItem.setChecked(!subMenuItem.isChecked());

但它给了我 NullPointerException... .

【问题讨论】:

  • NullPointerException 通常意味着您正在尝试引用未初始化的对象。
  • @Danieboy Dude,我知道 NullPointerException 是什么,我正在寻求答案,对于整个弹出菜单的事情......

标签: java android checkbox menu popupmenu


【解决方案1】:

您可以在您的代码中尝试此修改。像这样:

final PopupMenu popup = new PopupMenu(MainActivity.this, btn1);
    //Inflating the Popup using xml file
    popup.getMenuInflater().inflate(R.menu.search_menu, popup.getMenu());

    int item_selected = 1;
    if(item_selected == 1){
        popup.getMenu().findItem(R.id.sort_co).setChecked(true);
    }else if(item_selected == 2) {
        popup.getMenu().findItem(R.id.sort_title).setChecked(true);
    }

    //registering popup with OnMenuItemClickListener
    popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
        public boolean onMenuItemClick(MenuItem item) {
            switch (item.getItemId()) {

                case R.id.sort_co:
                    item.setChecked(true);
                    item_selected = 1;
                    return true;

                case R.id.sort_title:
                    item.setChecked(true);
                    item_selected = 2;

                    return true;


                default:
                    return true;
            }
        }

    });
    popup.show();

【讨论】:

    猜你喜欢
    • 2012-06-15
    • 1970-01-01
    • 1970-01-01
    • 2017-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多