简体   繁体   English

android PopupMenu中的可检查项可能无法正常工作

[英]checkable item in android PopupMenu not working probably

I have a problem in my app when I'm using popup menu whith checkable item. 当我使用可检查项目的弹出菜单时,我的应用程序出现问题。

I wanted to implement multi check item in my popup menu but when clicking one item the menu disappear although I have set the checkable behavior to all 我想在弹出菜单中实现多选项目,但是当我单击一项时,菜单消失了,尽管我将所有行为都设置为可检查

this is the menu layout 这是菜单布局

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

<group android:checkableBehavior="all">
    <item android:id ="@+id/sun"
        android:checkable="true"
        android:title="@string/sun"/>
    <item android:id ="@+id/Mon"
        android:title="@string/Mon"/>
    <item android:id ="@+id/Tus"
        android:title="@string/Tus"/>
    <item android:id ="@+id/Wed"
        android:title="@string/wed"/>
    <item android:id ="@+id/Thu"
        android:title="@string/Thu"/>
    <item android:id ="@+id/fri"
        android:title="@string/fri"/>
    <item android:id ="@+id/Sat"
        android:title="@string/Sat"/>



</group>

and this is the switch statement where I guess that the error is here but I cant find it 这是switch语句,我猜这里是错误,但是我找不到它

                    PopupMenu popupMenu = new PopupMenu(getBaseContext(), ch_specificDay);
                    MenuInflater inflater = popupMenu.getMenuInflater();
                    inflater.inflate(R.menu.weekdays, popupMenu.getMenu());

                 popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
                     @Override
                     public boolean onMenuItemClick(MenuItem item) {


                         switch (item.getItemId()) {
                             case R.id.sun:
                                 if(item.isChecked())
                             {
                                 item.setChecked(false);
                                 sunCheck = false;
                             }else
                                 {
                                     item.setChecked(true);
                                     sunCheck = true;
                                 }
                                break;

                             case R.id.Mon:
                                 if(item.isChecked())
                                 {
                                     item.setChecked(false);
                                     monCheck  = false;
                                 }else
                                 {
                                     item.setChecked(true);
                                     monCheck = true;
                                 }
                                break;

                             case R.id.Tus:
                                 if(item.isChecked())
                                 {
                                     item.setChecked(false);
                                     TusCheck = false;
                                 }else
                                 {
                                     item.setChecked(true);
                                     TusCheck = true;
                                 }
                                break;
                             case R.id.Thu:
                                 if(item.isChecked())
                                 {
                                     item.setChecked(false);
                                     ThrChec= false;
                                 }else
                                 {
                                     item.setChecked(true);
                                     ThrChec = true;
                                 }
                                    break;

                             case R.id.Wed:
                                 if(item.isChecked())
                                 {
                                     item.setChecked(false);
                                     wenCheck= false;
                                 }else
                                 {
                                     item.setChecked(true);
                                     wenCheck = true;
                                 }
                                break;

                             case R.id.Sat:
                                 if(item.isChecked())
                                 {
                                     item.setChecked(false);
                                     satCheck = false;
                                 }else
                                 {
                                     item.setChecked(true);
                                     satCheck  = true;
                                 }

                                 break;
                             case R.id.fri:
                                 if(item.isChecked())
                                 {
                                     item.setChecked(false);
                                     FriCheck  = false;
                                 }else
                                 {
                                     item.setChecked(true);
                                     FriCheck   = true;
                                 }

                                 break;
                                default:
                                    break;


                         }
                         return true ;
                     }
                 });
                    popupMenu.show();
                    break;
                default:

Here is the solution for you. 这是您的解决方案。

On click of menu Item call a method 单击菜单项时调用方法

keepMenuOpen(item);

This keepMenuOpen is defined like this. 该keepMenuOpen的定义如下。

private void keepMenuOpen(MenuItem item) {

        item.setShowAsAction(MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW);
        item.setActionView(new View(HomeActivity.this));
        item.setOnActionExpandListener(new MenuItem.OnActionExpandListener() {
            @Override
            public boolean onMenuItemActionExpand(MenuItem item) {
                return false;
            }

            @Override
            public boolean onMenuItemActionCollapse(MenuItem item) {
                return false;
            }
        });
    }

终于,我找到了解决方案(有人帮助我在facebook上)我只是将return true更改为false

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM