关于自定义PopupWindow里面视图的控制
2016-05-21 15:51
316 查看
需求这里不再赘述,就是一个popupwindow,出来之后里面的视图要分情况控制。
一开始,代码就是这么写的:
各种判断,这也算是常见的了,一般都会这么写吧。但是问题就出在这里。
第一次出现时,view与popupwindow都会初始化,这时候去控制view里面的控件,没有任何问题,但是点击屏幕popupwindow消失,第二次出现时,view里面的控件监听都会执行,就是之前隐藏的textview,现在不显示。通过日志显示,textview的各种属性都在,能获取到,而且都正常,但就是不显示。
想了好久后来想通了,问题就出现在 if (menuPop == null) { },这一条判断。
我的第二次出现popupwindow是将前面列出来的整个代码都执行一次,因为是写在一个方法里的。
也正是因为如此,第一次出现时:
view初始化,popupwindow初始化,并显示;
第二次出现时,这个时候就有问题了,
view还是会初始化,但是popupwindow已经经过一次初始化,这个时候它是有实例的,他不会在去初始化,于是就出现了这个情况:
这个问题是后来才想明白的,也的确是这样,既然知道了问题,相应的改动就简单了。要么不做判断,或者popupwindow不做全局变量,要么在dismiss时把popupwindow置空。问题自然就解决了。
平时多想想还是有作用的。
一开始,代码就是这么写的:
final View view = inflate(R.layout.popupwindow_menu_home); if (menuPop == null) { menuPop = new PopupWindow(view, ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT, true); menuPop.setOutsideTouchable(true); menuPop.setAnimationStyle(R.style.menuAnimation); menuPop.setBackgroundDrawable(new BitmapDrawable()); menuPop.setOnDismissListener(new PopupWindow.OnDismissListener() { @Override public void onDismiss() { } }); } if (!menuPop.isShowing()) { menuPop.showAsDropDown(v,v.getWidth(),-(7*v.getHeight())/4); }
各种判断,这也算是常见的了,一般都会这么写吧。但是问题就出在这里。
第一次出现时,view与popupwindow都会初始化,这时候去控制view里面的控件,没有任何问题,但是点击屏幕popupwindow消失,第二次出现时,view里面的控件监听都会执行,就是之前隐藏的textview,现在不显示。通过日志显示,textview的各种属性都在,能获取到,而且都正常,但就是不显示。
想了好久后来想通了,问题就出现在 if (menuPop == null) { },这一条判断。
我的第二次出现popupwindow是将前面列出来的整个代码都执行一次,因为是写在一个方法里的。
也正是因为如此,第一次出现时:
view初始化,popupwindow初始化,并显示;
第二次出现时,这个时候就有问题了,
view还是会初始化,但是popupwindow已经经过一次初始化,这个时候它是有实例的,他不会在去初始化,于是就出现了这个情况:
显示的是第一次的popupwindow,view也是第一次的view,但是后面要控制的,就是日志里看属性的textview却是第二次实例化的。
这个问题是后来才想明白的,也的确是这样,既然知道了问题,相应的改动就简单了。要么不做判断,或者popupwindow不做全局变量,要么在dismiss时把popupwindow置空。问题自然就解决了。
平时多想想还是有作用的。
相关文章推荐
- Cloudera集群中提交Spark任务出现java.lang.NoSuchMethodError: org.apache.hadoop.hbase.HTableDescriptor.addFamily错误解决
- CentOS常用的文件操作命令总结
- 如何从Hadoop官网下载hadoop开发包
- linux小记:makefile(随使用程度持续更新)
- CentOS7 安装与配置Ant
- Linux下配置rsync 同步数据
- 学习网站记录
- OpenCV中的按钮问题
- OpenCV中的按钮问题
- [Machine Learning & Algorithm]CAML机器学习系列2:深入浅出ML之Entropy-Based家族
- Nginx 与 Tomcat 配置及优化
- leetcode 之Copy List with Random Pointer(23)
- Linux基础知识总结(一)
- 学生管理系统(三层架构)
- 内存操作函数memcopy和memmove
- Tomcat学习之Context
- 第二部分 s3c2440 移植linux内核 添加网卡支持 yaffs2文件系统支持
- 《Linux命令行与shell脚本》笔记--第3章:基本的bash shell命令
- [问题] mac执行git命令出现xcrun: error: invalid active developer path解决方法
- dopost doget区别