博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
cocos2d-x改底层之动态改变UIListView中的某项在链表中的位置
阅读量:6004 次
发布时间:2019-06-20

本文共 1370 字,大约阅读时间需要 4 分钟。

先看一下UIListView添加、插入、删除的机制,再来考虑如何移动某一项在链表中得位置。

UIListView.h

 

1
2
/* 所有项用一个数组来保存 */
CCArray* _items;

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
void
ListView::pushBackCustomItem(Widget* item)
{
    
/* 向数组中添加一项 */
    
_items->addObject(item);
    
remedyLayoutParameter(item);
    
addChild(item);
    
_refreshViewDirty =
true
;
}
 
void
ListView::insertCustomItem(Widget* item,
int
index)
{
    
/* 向数组中插入一项 */
    
_items->insertObject(item, index);
    
remedyLayoutParameter(item);
    
addChild(item);
    
_refreshViewDirty =
true
;
}
 
void
ListView::removeItem(
int
index)
{
    
Widget* item = getItem(index);
    
if
(!item)
    
{
        
return
;
    
}
    
/* 从数组中移除一项 */
    
_items->removeObject(item);
    
removeChild(item);
    
_refreshViewDirty =
true
;
}

 

 

由此可见,链表中所有项的管理仅仅是由数组来存储的,所以移动一项的位置也就很简单了:

 

1
2
/* 声明一个位置移动函数,让某项移动到链表中的某个位置,参数1:某项当前位置,参数2:某项的目标位置 */
void
changeItemOrder(
int
curIdx,
int
tarIdx);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
void
ListView::changeItemOrder(
int
curIdx,
int
tarIdx )
{
    
if
(curIdx == tarIdx)
    
{
        
return
;
    
}
     
    
Widget* item = getItem(curIdx);
    
if
(!item)
    
{
        
return
;
    
}
    
/* 重新调整项item的位置:移除再重新插入 */
    
_items->removeObject(item);
    
_items->insertObject(item, tarIdx);
    
/* 调整布局,并打开刷新开关 */
    
remedyLayoutParameter(item);
    
_refreshViewDirty =
true
;
 
    
//sortAllChildren();
}

 

 

使用:

 

1
listView->changeItemOrder(
5
,
0
);
//将索引为5的项移到链表的开头成为第一项

 

转载于:https://www.cnblogs.com/dudu580231/p/4930418.html

你可能感兴趣的文章
css关于鼠标样式的设置
查看>>
Ubuntu 10.04升级git 到1.7.2或更高的可行方法
查看>>
MyBATIS(即iBATIS)问题集
查看>>
Linux下autoconf和automake使用
查看>>
UDP之socket编程
查看>>
Spring Security4实战与原理分析视频课程( 扩展+自定义)
查看>>
Centos6.5升级系统自带gcc4.4.7到gcc4.8.0
查看>>
redis安装与配置文件详解
查看>>
VMware安装失败 “Failed to create the requested registry key Key:installer Error:1021"
查看>>
虚拟化系列-VMware vSphere 5.1 VDP备份管理
查看>>
接口设计
查看>>
【VMCloud云平台】SCCM(六)客户端硬件、软件资产管理
查看>>
APP竞品分析的几个工具
查看>>
Vim命令合集
查看>>
sitemesh的使用
查看>>
同步工具类 java.util.concurrent.CountDownLatch
查看>>
一句代码实现 HTML5 语音搜索
查看>>
带动量因子的BP网络源码(C#实现)
查看>>
Skia深入分析9——延迟渲染和显示列表
查看>>
mmap函数实现共享内存
查看>>