listview的pushBackDefaultItem中的item属性被修改问题
time:2015/05/04
1. 描述
在cocostudio中有两个控件,一个listview,另外一个是隐藏的imageview,其中后者作为listview的元素。每次使用的时候把ImageView设置为默认的item(setItemModel),然后通过listview:pushBackDefaultItem进行插入指定个数的元素。但是在使用过程中会修改listview中的元素(通过getItem得到其中的元素),结果修改了listview的元素之后作为默认itemmodel的ImageView的属性也被修改了。eg:ImageView下面有一个node也是ImageView,一直都是可见的,但是修改完之后也会变成不可见的
2.原因
(1)分析
* 查看自己的代码setItemModel和pushBackDefaultItem两个接口的源码表示每次都是clone一个新的控件出来,所以getItem不会拿到作为itemmodel的控件并且修改其属性的
* 再看自己使用的代码:每次的ItemModel都是通过seekWidgetByName得到的
* 综合前面两点,很有可能就是seekWidgetByName的时候得到的item控件并不是UI界面上的那个,而是clone出来的,因为tag和name完全一样
Widget* Widget::clone()
{
Widget* clonedWidget = createCloneInstance();
clonedWidget->copyProperties(this);
clonedWidget->copyClonedWidgetChildren(this);
return clonedWidget;
}
(2)验证
* 比较每次seekWidgetByName出来的item,都是false,这说明的确不一样
* 修改获取item的方式,第一次读取UI界面的时候保存为全局的,每次就直接使用,比较每次的结果都是true(变量一样,当然都是一样的)
3.解决
(1)第一次加载UI界面(json)文件的时候把需要用到的控件保存下来(这里就是这个listview要用到的item),不要每次都通过seekWidgetByName去查找
4. 总结
(1)listview的pushBackDefaultItem是每次clone一个新的控件的,但是会把所有的属性复制过去,包括唯一标识一个控件的name和tag
(2)seekWidgetByName是根据名字或者tag进行深度优先遍历(其实是中序遍历),但是如果有相同的名字的控件就会出现问题,找到第一个相同名字的就直接返回了
(3)一个UI界面第一次加载的时候用seekWidgetByName找到后面要用的控件,以后不要通过这种方式去查找了,不但效率上有影响,而且还会出现问题
listview的pushBackDefaultItem中的item属性被修改问题的更多相关文章
- 【转】visio中关于shape属性的修改和读取
PS: 本文转自: http://blog.sina.com.cn/s/blog_6bcfb9420100wzxf.html visio中都是shape,shape就是一个对象,要想实现对shape ...
- python继承关系中,类属性的修改
class Grandfather(object): mylist = [] def __init__(self): pass class Father(Grandfather): pass Gran ...
- 文件重命名之动态改动ListView里指定Item中的组件属性
在Android实际开发过程中常常会遇到,改动ListView中某一项的值.怎样达到这一目的呢? 方法主要有两种: 第一种方式:当ListView中某一项的值发生变化之后,又一次载入数据已达到更新Li ...
- Android ListView 之 SimpleAdapter 二 (包含 item 中按钮监听)
1 MainActivity.java package com.myadapter; import java.util.ArrayList; import java.util.HashMap; ...
- Android处理ListView中的Item中的Button按钮不能点击的问题
问题描述:ListView列表中的Button按钮按钮不能点击 解决办法:在ListView中的Item项的布局文件中加上:android:descendantFocusability="b ...
- Android动态加载ListView中的Item
我这周上网看到动态增加listview的每一项item的布局,今天抽空自己写了一个,方便自己日后使用,这个效果还是很不错的,用到了Adapter的notifyDataSetChanged()方法,当点 ...
- VUE项目中使用this.$forceUpdate();解决页面v-for中修改item属性值后页面v-if不改变的问题
VUE项目中使用this.$forceUpdate();解决页面v-for中修改item属性值后页面v-if不改变的问题:https://blog.csdn.net/jerrica/article/d ...
- android中xml tools属性详解
第一部分 安卓开发中,在写布局代码的时候,ide可以看到布局的预览效果. 但是有些效果则必须在运行之后才能看见,比如这种情况:TextView在xml中没有设置任何字符,而是在activity中设置了 ...
- android中xmlns:tools属性详解
今天读到一篇总结的非常棒的文章,写的逻辑很清晰也很实用,很少见到如此棒的文章了.就原文转发过来,我把格式给整理了一下,分享给园子里的各位朋友!好久没写博客了,就为2015年的11月留份纪念吧.希望对你 ...
随机推荐
- 设置npm的镜像源
将npm的镜像源设置为淘宝镜像源 1.执行命令修改镜像源地址:npm config set registry https://registry.npm.taobao.org 2.重新加载修改后的地址: ...
- JVM-类加载过程(Java类的生命周期)
什么是类加载 类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个java.lang.Class对象,用来封装类在方法区内的数据结构.类的 ...
- 一次java导出pdf的经历
近期由于工作需要,需要将html代码导入到pdf中,经过了几种pdf的方案对比后发现IText是最简单和便捷的一种方式,于是乎采用了Itext. PDF生成 第一步:导入Maven依赖 <!-- ...
- cppjieba分词学习笔记
cppjieba分词包主要提供中文分词.关键词提取.词性标注三种功能 一.分词 cppjieba分词用的方法是最大概率分词(MP)和隐马尔科夫模型(HMM),以及将MP和HMM结合成的MixSegme ...
- golang reflect包使用解析
golang reflect包使用解析 参考 Go反射编码 2个重要的类型 Type Value 其中Type是interface类型,Value是struct类型,意识到这一点很重要 Type和Va ...
- PTA (Advanced Level) 1012 The Best Rank
The Best Rank To evaluate the performance of our first year CS majored students, we consider their g ...
- c之指针与数组(1)
1.指针与地址 一元运算符&可用于取一个对象的地址.例如:int i=1;&i就是计算机地址. 一元运算符*是间接寻址或者间接引用运算符.例如: int x=1,y:int ip*: ...
- Java Stream File & IO
摘录自:http://www.runoob.com/java/java-files-io.html Java 流(Stream).文件(File)和IO Java.io包几乎包含了所有操作输入.输出需 ...
- window常用的快捷键
1.win+r打开运行命令 2.appwiz.cpl打开程序面板,进行程序的安装.卸载 输入win+r打开运行命令,输入appwiz.cpl 3.services.msc打开服务,一般用于启动或者关闭 ...
- 删除N天前的备份文件脚本(windows)
D:\bat\forfiles.exe /p "D:\dmpbk" /s /m *.dmp /d -2 /c "cmd /c del @path" 解析: 使用 ...