`
zhoudan241
  • 浏览: 50542 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

关于PopupWindow中加入ListView后其它组件无法响应解决办法

 
阅读更多

最近项目中有用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.如下:

   实例化按钮

imgbtn=(ImageButton)map.findViewById(R.id.imgBtn);
imgbtn.setOnClickListener(this);//注册事件
parameterPop.setOutsideTouchable(true);
   selectListAdapter adapter1=new selectListAdapter(this,showItem);
   parameter_list.setAdapter(adapter1);
   parameter_list.setOnItemClickListener(new OnItemClickListener(){
    @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(){
     @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 设置监听代码如下:

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显示时 无法响应按手机返回等键了!

 

分享到:
评论
2 楼 wanghonghui023 2011-09-23  
wzl2007 写道
有个问题,就是在设置 parameterPop.getContentView().setOnTouchListener()后,就会覆盖listview中的onItemClick()事件吧?

对啊 ,我也发现这个问题,点击item无效了? 求解
1 楼 wzl2007 2011-09-21  
有个问题,就是在设置 parameterPop.getContentView().setOnTouchListener()后,就会覆盖listview中的onItemClick()事件吧?

相关推荐

    实现在android的popupwindow中显示listview.docx编程资料

    ### 实现在Android的PopupWindow中显示ListView #### 一、简介 在Android开发过程中,PopupWindow是一种非常实用的UI组件,它可以用来展示临时性的信息或者菜单等。本篇文档主要介绍如何在PopupWindow中集成一个...

    Android: PopupWindow 上显示 ListView 并相应 Demo

    在Android开发中,有时我们需要创建一个浮动窗口来展示一些临时信息或者交互,PopupWindow就是这样的一个组件。本示例将详细介绍如何在PopupWindow上显示一个ListView,并实现与之相关的交互功能,模仿QQ登录界面,...

    Android 点击listview弹出popupwindow弹出框

    在Android开发中,`ListView`是一种常用的组件,用于展示大量数据列表。而`PopupWindow`则是用来实现临时显示一个小窗口的工具,常用于快速操作或者下拉菜单等场景。本篇将详细介绍如何在用户点击`ListView`时弹出一...

    PopupWindow+ListView

    在Android开发中,`PopupWindow` 和 `ListView` 是两种常用组件,它们分别用于实现弹出窗口和可滚动列表的功能。结合使用时,可以创建出交互性更强的UI设计,如下拉菜单、浮层选择器等。让我们深入探讨如何在Android...

    Android用PopupWindow实现弹出listview形式菜单

    在本教程中,我们将深入探讨如何使用`PopupWindow`来构建一个以`ListView`形式展示的菜单。 首先,`PopupWindow`的核心概念是它不依赖于任何父视图,而是可以直接附加到屏幕的某个像素位置。要创建一个`PopupWindow...

    PopupWindow_ListView_Singleselect.zip_ListView_PopupWindow ListV

    在Android开发中,`PopupWindow`是一个非常实用的组件,常用于实现弹出窗口的效果,如下拉菜单、浮动提示等。本项目“PopupWindow_ListView_Singleselect”结合了`PopupWindow`与`ListView`,实现了单选功能,下面...

    使用PopupWindow + 2个ListView实现仿 美团/淘宝/百度糯米 多级分类菜单效果

    在本案例中,我们将利用`PopupWindow`结合两个`ListView`来达成这个目的。`PopupWindow`是Android系统提供的一种可以弹出窗口的组件,它具有灵活性高、可定制性强的特点,常用于实现下拉菜单、悬浮窗口等效果。 ...

    PopupWindow之显示顶层对话框代码

    PopupWindow是Android开发中一个非常重要的组件,它允许开发者创建可弹出的窗口,通常用于显示临时信息或者作为上下文菜单。在Android应用设计中,PopupWindow可以为用户提供直观、便捷的交互方式,比如在主界面之上...

    popupwindow

    在"popdemo"这个示例项目中,可能包含了如上所述的代码,同时还会展示如何添加交互事件,比如点击按钮关闭PopupWindow,或者在PopupWindow中嵌入ListView等复杂组件。 为了使PopupWindow更加生动,我们还可以添加...

    PopupWindow模仿UC底部Menu

    在Android开发中,`PopupWindow` 是一个非常实用的组件,它可以用来创建弹出式窗口,通常用于实现类似下拉菜单、浮动按钮等效果。在本项目中,我们将利用 `PopupWindow` 模仿UC浏览器底部的菜单设计,提供一种在用户...

    探索Popupwindow-对话框风格的窗口(一)

    此外,PopupWindow还可以与其他组件结合使用,如Spinner、ListView等,以实现更复杂的交互效果。在实际开发中,我们可能会遇到需要根据用户操作动态更新PopupWindow内容的情况,这时可以通过重新设置PopupWindow的...

    Android PopupWindow实例

    - PopupWindow不能直接设置透明背景,否则可能无法响应触摸事件。可以通过设置半透明背景解决。 - 如果PopupWindow超过屏幕大小,可能需要手动调整位置以适应屏幕。 综上所述,PopupWindow在Android开发中有着...

    PopupWindow使用,弹出菜单窗口

    PopupWindow在Android开发中是一种非常常用的组件,它用于创建弹出式窗口,通常用作对话框、下拉菜单或者快捷操作按钮。这个组件允许开发者在应用程序的任何位置显示一个浮动的视图,提供了灵活的布局和交互方式。...

    PopupWindow

    PopupWindow是Android开发中一个非常重要的组件,它允许开发者在界面上创建...在文件"PopupWindowText"中,可能包含了更多关于PopupWindow的使用示例和代码片段,通过学习这些内容,你可以更深入地理解和掌握这一组件。

    PopupWindow下拉列表.zip

    PopupWindow在Android开发中是一种非常实用的组件,它允许开发者创建弹出式窗口,可以用于显示各种临时信息或交互界面,比如下拉列表。在安卓应用的毕业设计或项目实战中,PopupWindow常用于实现丰富的用户交互体验...

    Android--开发--PopupWindow下拉列表.rar

    在Android应用开发中,PopupWindow是一个非常实用的组件,它允许开发者在屏幕任意位置弹出一个窗口,通常用于实现各种快捷菜单、下拉列表等效果。这个“Android--开发--PopupWindow下拉列表”资源包可能包含了一系列...

    Android从底部弹出的popupwindow效果

    在Android开发中,`PopupWindow`是一个非常实用的组件,常用于实现各种临时显示的对话框效果,如底部弹出菜单、提示信息等。本文将深入探讨如何利用`PopupWindow`来实现从屏幕底部弹出的自定义效果,以及相关的编程...

    android使用PopUpWindow自定义下拉框

    在Android开发中,`PopupWindow` 是一个非常实用的组件,它可以用来创建各种弹出式视图,如菜单、对话框或自定义的下拉框。本知识点将深入讲解如何利用`PopupWindow`来实现一个自定义的下拉框。 首先,`PopupWindow...

Global site tag (gtag.js) - Google Analytics