【问题标题】:close popup window with same button用相同的按钮关闭弹出窗口
【发布时间】:2014-03-16 16:19:55
【问题描述】:

我想通过打开它的同一个按钮关闭弹出窗口,当我再次单击该按钮时,应该关闭弹出窗口。并且还想在我单击后退按钮时清除该窗口。谁能帮助我解决这个问题? 谢谢。

这是我的代码,

ivmainmenu.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub

            LayoutInflater layoutInflater 
             = (LayoutInflater)getBaseContext()
              .getSystemService(LAYOUT_INFLATER_SERVICE);  
            View popupView = layoutInflater.inflate(R.layout.popupwindow, null);  
          final PopupWindow popupWindow = new PopupWindow(popupView,LayoutParams.FILL_PARENT,
                  LayoutParams.WRAP_CONTENT);  
                popupWindow.showAsDropDown(ivmainmenu, 150,14);
                popupWindow.setOutsideTouchable(true);

                TextView tvpopupwork = (TextView)popupView.findViewById(R.id.tvpopupwork);
                TextView tvpopupabout = (TextView)popupView.findViewById(R.id.tvpopupabout);
                TextView tvpopupservices = (TextView)popupView.findViewById(R.id.tvpopupservices);
                TextView tvpopupcontact = (TextView)popupView.findViewById(R.id.tvpopupcontact);

                tvpopupwork.setOnClickListener(new OnClickListener() {

                    @Override
                    public void onClick(View v) {
                        // TODO Auto-generated method stub
                        Intent intent = new Intent(Home.this,Ourwork.class);
                        intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
                        startActivity(intent);
                    }
                });

                tvpopupabout.setOnClickListener(new OnClickListener() {

                    @Override
                    public void onClick(View v) {
                        // TODO Auto-generated method stub
                        Intent intent = new Intent(Home.this,Aboutus.class);
                        intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
                        startActivity(intent);  
                    }
                });

                tvpopupservices.setOnClickListener(new OnClickListener() {

                    @Override
                    public void onClick(View v) {
                        // TODO Auto-generated method stub

                        Intent intent = new Intent(Home.this,Services.class);
                        intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
                        startActivity(intent);
                    }
                });

                tvpopupcontact.setOnClickListener(new OnClickListener() {

                    @Override
                    public void onClick(View v) {
                        // TODO Auto-generated method stub

                        Intent intent = new Intent(Home.this,Contact.class);
                        intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
                        startActivity(intent);
                    }
                });
           }
        });

【问题讨论】:

    标签: android popup


    【解决方案1】:

    您还可以创建 2 个侦听器来侦听不同的事件。 侦听器 1 - 这将用于在打开弹出窗口后执行任务 Listener 2 - 关闭弹窗

    您可以从另一个侦听器设置侦听器(在按钮单击时切换侦听器)。

    listener2 = new OnClickListener() {
    
    @Override
    public void onClick(View v) {
        tv.setText("Listener2");
        //assign button to listener1
        button.setOnClickListener(listener1);
    }};
    
    listener1 = new OnClickListener() {
    
    @Override
    public void onClick(View v) {
        tv.setText("Listener1");
        //assign button to listener2
        button.setOnClickListener(listener2);
    }};
    
    //set this listener as the default(initially) listener onCreate
    button.setOnClickListener(listener1);
    

    【讨论】:

      【解决方案2】:

      我会使用一个布尔变量,比如;

      boolean toggle = true;
      

      在 onClickListener 中

      PopupWindow popupWindow;
      if(toggle){
         // Show popup here
         toggle = false;
      }
      else{
         if(popupWindow != null && popupWindow.isShowing())
            popupWindow.dismiss();
         toggle = true;
      }
      

      【讨论】:

        【解决方案3】:

        使用布尔标志

           if(flag)
        {
        hideWindow();
        flag=false;
        }
        else
        {
        showWindow();
        flag=true;
        }
        

        Override onBackPressed() 按下返回时隐藏

        【讨论】:

        • 我应该在哪里写这些东西?
        猜你喜欢
        • 2014-10-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-01-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-14
        相关资源
        最近更新 更多