弹出窗口的setOnDismissListener再次触发弹出菜单

5
以下是我的代码, menu - ImageView menubottom - ImageView 我的要求是在弹出窗口显示时显示menubottom图片。
menu.setOnClickListener(new OnClickListener() 
    {   
        public void onClick(View v) 
        {View layout=(View)getLayoutInflater().inflate(R.layout.navigationbar, null);
        popupWindow = new PopupWindow(getApplicationContext());
        popupWindow.setBackgroundDrawable(new BitmapDrawable());
        popupWindow.setContentView(layout);
        popupWindow.setHeight(LayoutParams.WRAP_CONTENT);
        popupWindow.setWidth(swidth);
        popupWindow.setFocusable(false);
        popupWindow.setOutsideTouchable(true);
        popupWindow.setAnimationStyle(-1);

            if(x==1)
            {   popupWindow.showAsDropDown(menubottom);
                menubottom.setVisibility(View.VISIBLE);
                x=0;                    
            }
            else
            {   
                popupWindow.dismiss();
                popupWindow=null;           
            }
            popupWindow.setOnDismissListener(new PopupWindow.OnDismissListener() {

                @Override
                public void onDismiss() {
                    // TODO Auto-generated method stub
                    menubottom.setVisibility(View.INVISIBLE);   
                    x=1;

                }
            });

        }

}

问题: 点击菜单按钮时,弹出窗口显示并显示下部菜单。 再次点击菜单时,弹出菜单隐藏,然后再次显示。
按下弹出菜单外部时,其按预期工作(弹出和下部菜单被隐藏)。
我认为setOnDismissListener会再次触发menu.setOnClickListener。 提前感谢您的帮助。

简而言之,您希望仅显示一次PopMenu。之后,您希望隐藏按钮,以便无法再次显示... 对吗? - iMDroid
3个回答

2

我认为问题出在弹出窗口之后,因为菜单按钮位于popupwindow之外,popupwindow被关闭后,菜单按钮的onclick再次触发。 所以你可以像这样做(最初x=1

menu.setOnClickListener(new OnClickListener() 
{   
    public void onClick(View v) 
    {View layout=(View)getLayoutInflater().inflate(R.layout.navigationbar, null);
    popupWindow = new PopupWindow(getApplicationContext());
    popupWindow.setBackgroundDrawable(new BitmapDrawable());
    popupWindow.setContentView(layout);
    popupWindow.setHeight(LayoutParams.WRAP_CONTENT);
    popupWindow.setWidth(swidth);
    popupWindow.setFocusable(false);
    popupWindow.setOutsideTouchable(true);
    popupWindow.setAnimationStyle(-1);

      /*  if(x==1)
        {   popupWindow.showAsDropDown(menubottom);
            menubottom.setVisibility(View.VISIBLE);
            x=0;                    
        }
        else
        {   
            popupWindow.dismiss();
            popupWindow=null;           
        } */

        if(x==0) {
            x=1;
        } else {
        popupWindow.showAsDropDown(menubottom);
            menubottom.setVisibility(View.VISIBLE);

        }
        popupWindow.setOnDismissListener(new PopupWindow.OnDismissListener() {

            @Override
            public void onDismiss() {
              // TODO Auto-generated method stub
                menubottom.setVisibility(View.INVISIBLE);   
                x=0;

            }
        });

    }

}


问题仍然存在。 - Vignesh

0

我相信您想在弹出菜单显示后隐藏菜单按钮。

如果是这样,那么您的逻辑是错误的...请尝试以下方法...

boolean isDisplayed=false;


 menu.setOnClickListener(new OnClickListener() 
        {   
            public void onClick(View v) 
            {View layout=(View)getLayoutInflater().inflate(R.layout.navigationbar, null);
            popupWindow = new PopupWindow(getApplicationContext());
            popupWindow.setBackgroundDrawable(new BitmapDrawable());
            popupWindow.setContentView(layout);
            popupWindow.setHeight(LayoutParams.WRAP_CONTENT);
            popupWindow.setWidth(swidth);
            popupWindow.setFocusable(false);
            popupWindow.setOutsideTouchable(true);
            popupWindow.setAnimationStyle(-1);

                if(isDisplayed==false)
                {   popupWindow.showAsDropDown(menubottom);
                    menubottom.setVisibility(View.VISIBLE);
                    isDisplayed=true;                    
                }
                else
                {   
                    popupWindow.dismiss();
                    popupWindow=null; 
                    menubottom.setVisibility(View.INVISIBLE);          
                }


            }

    }

在这段代码中,当点击弹出框外部隐藏弹出框时,isDisplayed的值将为true,在下一次按菜单按钮时,它将不会显示弹出框。只有在第二次尝试时才会显示。 - Vignesh
现在它在第二次点击时触发。 - DalveerSinghDaiya

0
 PopupMenu popupMenu = new PopupMenu(OrderSceenWithOrder.this,fabMain);
                popupMenu.getMenuInflater().inflate(R.menu.pop_up, popupMenu.getMenu());
                popupMenu.setOnDismissListener(new PopupMenu.OnDismissListener() {

                    @Override
                    public void onDismiss(PopupMenu popupMenu) {
                        fabMain.setImageDrawable(ContextCompat.getDrawable(OrderSceenWithOrder.this, R.drawable.ic_baseline_add_24));
                    }

                });
                popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
                    @Override
                    public boolean onMenuItemClick(MenuItem item) {
                        Toast.makeText(OrderSceenWithOrder.this, ""+item.getTitle(), Toast.LENGTH_SHORT).show();
                        fabMain.setImageDrawable(ContextCompat.getDrawable(OrderSceenWithOrder.this, R.drawable.ic_baseline_add_24));
                        isClicked=true;
                        return true;
                    }

                });
                popupMenu.show();

虽然这段代码可能解决了问题,但是包括解释它如何以及为什么解决了问题将有助于提高您的帖子质量,并可能导致更多的赞。请记住,您正在回答未来读者的问题,而不仅仅是现在提问的人。请[编辑]您的答案以添加解释并指出适用的限制和假设。 - Adrian Mole

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接