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月留份纪念吧.希望对你 ...
随机推荐
- Capture Conversion解读
Let G name a generic type declaration with n type parameters A1,...,An with corresponding bounds U1, ...
- JavaScript设计模式-2高级类.
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- Android四大组件--服务(Service)
1. startService和bindService的区别 1. startService: 生命周期: onCreate---onStartCommand---onDestory 与服务的通讯: ...
- 微信小程序自学过程中遇到的问题 转
view标签下hover必须为true时,设置hover-class才有效,hover-start-time和hover-stay-time的形式如下: < view class=" ...
- MySQL---5、可视化工具Navicat for MySQL安装配置
一.安装文件包下载 Navicat for MySQL 安装软件和破解补丁: 链接:https://pan.baidu.com/s/1oKcErok_Ijm0CY9UjNMrnA 密码:4xb1 ...
- C# 类库下 读取不到config里节点的问题
前提:要在当前项目下App.config配置信息里读取连接数据库的字符串.忘记创的是个类库.导致一直报错(对象未实例) 解决办法: 程序运行不会读取本项目下的app.config文件(实际它只是个模板 ...
- nodejs应用离线安装部署、卸载
公司写的文档,直接粘贴过来了: 本文档提供node应用一键安装.部署.卸载说明,包含对应脚本文件 默认版本:1.nodejs:v6.11.2.linux-x642.全局npm包:pm2.supervi ...
- C++类数组的实现
请看下面的代码: //xy_3_1 2013/10/26 #include<stdio.h> #include<iostream.h> #include<string.h ...
- xsl 和xml transform方法的调用
xsl 和xml生成html,兼容多个浏览器 <html> <head> <meta charset="UTF-8"/> </head&g ...
- idea搭建Spring Boot+Mybatis及使用教程
环境准备 idea 15 jDK tomcat maven 搭建方式 官网下载源码包解压缩 使用idea中的Spring initializr创建 这两种方法创建的项目完全相同,只是操作方式不一样 这 ...