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

【转】创建一个popupwindow,在里面放置一个listview,并且使listview可以响应点击事件

阅读更多
原文:http://blog.csdn.net/zzcchunter/article/details/8002285

popWinPlaylist.showAtLocation(vv_main, Gravity.TOP|Gravity.LEFT, 0, 150);
popWinPlaylist.setFocusable(true);
popWinPlaylist.update();


这下出现了 popupwindow 意外的地方不能点击了


最近项目中有用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显示时 无法响应按手机返回等键了!
分享到:
评论

相关推荐

    Android 点击listview弹出popupwindow弹出框

    本篇将详细介绍如何在用户点击`ListView`时弹出一个包含`PopupWindow`的弹出框,并且这个`PopupWindow`内还具有`ListView`的右滑删除功能。 首先,我们需要创建`PopupWindow`。`PopupWindow`的构造函数通常接收三个...

    PopupWindow和ListView配合使用

    为了实现点击外部区域关闭`PopupWindow`,我们需要在创建`PopupWindow`时设置`touchable`属性为`true`,并添加一个触摸监听器,监听到外部触摸事件时调用`dismiss()`方法。对于Back键取消,我们可以在`Activity`中...

    PopupWindow_ListView_Singleselect.zip

    在Android开发中,`PopupWindow`是一个非常实用的组件,它可以用来创建弹出式窗口,为用户提供临时的信息或者交互操作。本示例“PopupWindow_ListView_Singleselect.zip”主要展示了如何结合`PopupWindow`与`...

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

    在Android开发中,`PopupWindow`是一个非常实用的组件,它可以用来实现各种形式的弹出窗口,如下拉菜单、提示框等。本教程将详细讲解如何使用`PopupWindow`来创建一个以`ListView`形式展示的菜单。首先,我们需要...

    PopupWindow_ListView_Singleselect.zip_ListView_PopupWindow ListV

    4. **交互**:默认情况下,`PopupWindow`不响应触摸事件,可以通过设置`setFocusable(true)`使其可聚焦,从而能够响应触摸事件和键盘事件。 `ListView`是Android中的一个列表视图控件,用于展示大量数据的列表。它...

    PopupWindow+ListView

    3. **处理ListView的事件**:为了响应用户的点击事件,可以为`ListView`设置一个`OnItemClickListener`,在`onItemClick()`方法中执行相应的逻辑。 结合`PopupWindow`与`ListView`的示例代码可能如下: ```java //...

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

    `PopupWindow`是Android系统提供的一个轻量级窗口,它可以显示在屏幕上的任意位置,用于创建浮动、弹出式的UI组件。在本教程中,我们将深入探讨如何使用`PopupWindow`来构建一个以`ListView`形式展示的菜单。 首先...

    点击ListView弹出PopupWindow仿腾讯新闻

    点击ListView弹出PopupWindow仿腾讯新闻

    popupwindow中用listView绑定数据并显示在View上方

    在Android开发中,PopupWindow是一个非常实用的组件,它能够创建一个浮动的窗口,通常用于在主界面之上显示一些临时性的信息或者交互操作。在这个场景中,我们将探讨如何在PopupWindow中使用ListView来展示数据,并...

    popupwindow中显示listview自适配

    本文将深入探讨如何在PopupWindow中显示一个自适应的ListView,使内容可以根据数据源动态调整。 首先,我们需要了解PopupWindow的基本用法。PopupWindow类在`android.widget.PopupWindow`包中,通过实例化...

    PopupWindow+ListView+在item顶部与底部跳跃

    通过以上步骤,你就可以在PopupWindow中集成一个可动态跳跃item的ListView了。这个功能可以用于创建各种有趣的交互,如搜索建议、下拉菜单等。注意在实际应用中,要充分考虑用户体验和性能,避免不必要的计算和过度...

    Android PopupWindow泡泡效果(有listview)

    在Android开发中,PopupWindow是一个非常实用的组件,它能够创建一种浮现在当前视图之上的窗口效果,常用于实现下拉菜单、提示框等。本篇将详细讲解如何利用PopupWindow实现一个具有泡泡效果,并且包含ListView的...

    ListView和PopupWindow集合模仿的微信的

    结合ListView和PopupWindow,我们可以创建一个类似微信下拉菜单的交互体验,用户在某个操作后(如点击按钮)弹出包含多个选项的PopupWindow,每个选项对应ListView的一个列表项。通过这种方式,开发者可以为用户提供...

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

    为了实现在PopupWindow中显示ListView,首先需要创建一个PopupWindow对象。以下是一段示例代码: ```java private void popAwindow(View parent) { if (window == null) { LayoutInflater layoutInflater = ...

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

    在Android开发中,创建一个类似美团、淘宝或百度糯米的多级分类菜单是常见的需求,这种功能能够提供用户友好的导航体验。本文将详细介绍如何利用`PopupWindow`结合两个`ListView`来实现这一效果。 首先,`...

    PopupWindow嵌套ListView

    在Android开发中,`PopupWindow`是一个非常实用的组件,它可以用来创建弹出式窗口,通常用于实现下拉菜单、提示信息等效果。本示例着重讲解如何将`ListView`嵌套在`PopupWindow`中,并解决`ListView`宽度自适应的...

    popupWindow显示listview后,自适配

    在Android开发中,PopupWindow是一种常用的UI组件,它可以在屏幕上的任意位置弹出一个窗口,通常用于实现下拉菜单、浮层提示等效果。当需要在PopupWindow中展示ListView时,自适应屏幕尺寸和内容是必不可少的技术...

    自定义的listview、GridView、 Popupwindow简易demo

    2. 设计布局:为ListView的每一项创建一个布局文件,这将决定每个条目的外观。 3. 绑定数据:在Activity或Fragment中实例化Adapter,传入数据集,然后设置给ListView的`setAdapter()`方法。 接下来是GridView,它与...

    PopupWindow+ListView实现Android搜索框

    `PopupWindow`是Android中的一个类,它允许开发者创建可弹出的窗口,这种窗口可以在屏幕上的任意位置显示,并且可以设置背景透明或者不透明,适合用来创建各种临时的、浮动的UI元素。在我们的场景中,`PopupWindow`...

    AndroidListView+PopupWindow实现item点击弹出PopupWindow

    AndroidListView+PopupWindow实现item点击弹出PopupWindow 博客地址:https://blog.csdn.net/dreams_deng/article/details/104618270

Global site tag (gtag.js) - Google Analytics