PopupWindow响应ListView Item事件

最近项目中有用PopupWindow。我在其中添加一个ListView放入PopupWindow中,然后对对PopupWindow设置了setFocusable(true)让PopupWindow获得了焦点。初始化            

               PopupWindow  parameterView=this.getLayoutInflater().inflate(R.layout.parameterpopup, null);  

               parametPopLayout=(LinearLayout)parameterView.findViewById(R.id.parametPopLayout);  
              
               parameter_list=(ListView)parameterView.findViewById(R.id.parameter_list);  
                  
               parameterPop = new PopupWindow(parameterView, 140, ViewGroup.LayoutParams.WRAP_CONTENT);  
               parameterPop.setOutsideTouchable(true);  


这时候问题来了当你点击页面中其它控件是无法响应的。发现很多人都有遇到这个困惑。其实你可以通过pw(PopupWindow对象).getContextView()拿到他的父视图。然后通过给父视图注册事件 让pw失去焦点 。我项目中是通过一个按钮点击之后显示pw.如下:

   实例化按钮
Java代码

     imgbtn=(ImageButton)map.findViewById(R.id.imgBtn);  

Java代码 

     imgbtn.setOnClickListener(this);//注册事件  

Java代码 

       parameterPop.setOutsideTouchable(true);  
       selectListAdapter adapter1=new selectListAdapter(this,showItem);  
       parameter_list.setAdapter(adapter1);  
       parameter_list.setOnItemClickListener(new OnItemClickListener(){  

Java代码 

        @Override  
        public void onItemClick(AdapterView<?> parent, View view,  
          int position, long id) {  
         // TODO Auto-generated method stub  
           
         parameterPop.dismiss();  
        }  
          
       });   
       if(parameterPop.isShowing()){  
        parameterPop.dismiss();  
       }else{  
        showPop=true;  
          
        parameterPop.showAtLocation(v, Gravity.LEFT, 10, 40);  
        parameterPop.setFocusable(true);  
        parameterPop.update();  
        //做一个不在焦点外的处理事件监听  
        parameterPop.getContentView().setOnTouchListener(new OnTouchListener(){  

Java代码 

         @Override  
         public boolean onTouch(View v, MotionEvent event) {  
          // TODO Auto-generated method stub  
          parameterPop.setFocusable(false);  
          parameterPop.dismiss();  
          return true;  
         }  
           
        });  
       }  

 从而解决了这个问题。还有一个问题就是如果当Pw显示之后。你想按返回等系统键也是无法响应的。那我们应该如何来处理咧?相信看了上面代码的应该会明白。要响应谁就交给谁。setFocusable(true)此时已经让Pw获取了焦点。解决办法:因为Pw里放置了ListView。可以利用setOnKeyListener对Pw里的ListView 设置监听代码如下:
Java代码 

    parameter_list.setOnKeyListener(new OnKeyListener(){  
      
                    @Override  
                    public boolean onKey(View v, int keyCode, KeyEvent event) {  
                        // TODO Auto-generated method stub  
                        parameterPop.dismiss();  
                        return false;  
                    }  
                      
                });  

就能解决当Pw显示时 无法响应按手机返回等键了
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章