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顯示時 無法響應按手機返回等鍵了
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章