Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache flex AS3/Flex 4数据组自定义Itemrenderer视频对象_Apache Flex_Actionscript 3_Flex4 - Fatal编程技术网

Apache flex AS3/Flex 4数据组自定义Itemrenderer视频对象

Apache flex AS3/Flex 4数据组自定义Itemrenderer视频对象,apache-flex,actionscript-3,flex4,Apache Flex,Actionscript 3,Flex4,我有一个带有自定义视频和音频流itemRenderer和用户数据提供者的数据组。顺便说一句,该项目是一个视频会议应用程序。以下是我的问题: 列表中有2个用户,w/c是数据组的数据提供程序 array[0] = user1; array[1] = user2; 当user1离开房间时,user2将在user1的位置上发生。所以它会变成这样: array[0] = user2; 问题是,数组[0]中的itemrenderer保持不变,而数组[1]中的itemrenderer将消失。所以,就好像是

我有一个带有自定义视频和音频流itemRenderer和用户数据提供者的数据组。顺便说一句,该项目是一个视频会议应用程序。以下是我的问题:

列表中有2个用户,w/c是数据组的数据提供程序

array[0] = user1;
array[1] = user2;
当user1离开房间时,user2将在user1的位置上发生。所以它会变成这样:

array[0] = user2;
问题是,数组[0]中的itemrenderer保持不变,而数组[1]中的itemrenderer将消失。所以,就好像是user2离开了房间,而不是user1

我通过刷新/更新/更新列表修复了此问题,以便刷新itemrenderer,以下是我的代码:

private function restoreCameras():void{
    //backup the current itemrenderer
            _stored_itemrenderer = dgUsers.itemRenderer;
    //nullify all the contents of the dataGroup
            dgUsers.dataProvider = null;
            dgUsers.itemRenderer = null;
    //restore the dataGroup's dataProvider, for refreshing the data
            dgUsers.dataProvider = userArrayList;
    //restore the itemrenderer backup
            dgUsers.itemRenderer = _stored_itemrenderer;
}
我的方法行吗?我也使用这个函数来刷新摄影机提要,w/c是itemrenderer。但在刷新时,音频/视频源会堆叠。有什么建议吗

谢谢, 吉尔伯特

这是数据组:

以下是自定义ItemRenderer:
你能展示更多的代码吗?像数据组、绑定、如何删除用户等。我编辑了我的帖子,先生,我添加了其中使用的代码。您不使用数据提供程序绑定有什么原因吗?如果项目呈现器不知道数据提供程序,为什么要处理删除?冒泡事件是您需要分派给了解数据的父级的事件,然后父级将删除条目,其余的由绑定处理。在itemRenderer中,我添加了用于关闭选定项目标题窗口的代码。
<fx:Script>
    <![CDATA[
        import mx.events.CloseEvent;
        import spark.components.DataGroup;

        private function closeVideopod(e:CloseEvent):void{
            var parentDG:DataGroup = owner as DataGroup;
            parentDG.dataProvider.removeItemAt(parentDG.dataProvider.getItemIndex(data));
            //(parentDG.dataProvider as ArrayCollection).refresh();
            this.removeChild(vidpod);
            vidpod.removeAllElements();
        }

    ]]>
</fx:Script>
<s:states>
    <s:State name="normal"/>
    <s:State name="hovered"/>
</s:states>

<s:layout>
    <s:TileLayout/>
</s:layout> 
<videoconference:Videopod id="vidpod" width="151" height="143" userItem="{data}" toolTip="{data.name}" close="closeVideopod(event)"/>
 var userObj:Object = userListSO.data.testArr;
var userArray:Array = userObj.Name;
var rolesArray:Array = userObj.Role;
var statusArray:Array = userObj.Status;
var userRenderAC:ArrayCollection = new ArrayCollection();

for(var x:int = 0; x < userArray.length; x++){
    userRenderAC.addItem({
        name: userArray[x],
        role: rolesArray[x],
        status: statusArray[x]
    });
private function alertExitHandler(e:CloseEvent):void{
            if(e.detail == Alert.YES){
                var userObj:Object = new Object();

                var obj:Object = userListSO.data.testArr;
                var userList:Array = obj.Name;
                var rolesArray:Array = obj.Role;
                var statusArray:Array = obj.Status;

                var updatedUserList:Array = new Array();
                var updatedRolesList:Array = new Array();
                var updatedStatusList:Array = new Array();


                for(var ctr:int = 0; ctr < userList.length; ctr++) {
                    var sessionName:String = userDetails.username;
                    var listName:String = userList[ctr];

                    if(listName != sessionName) {
                        updatedUserList.push(listName);
                        updatedRolesList.push(rolesArray[ctr]);
                        updatedStatusList.push(statusArray[ctr]);
                    }
                }

                userObj.Name = updatedUserList;
                userObj.Role = updatedRolesList;
                userObj.Status = updatedStatusList;
                //here is the updated propery testarr...
                userListSO.setProperty("testArr", userObj);

                setTimeout(logout,500);
            }else{
                //logout();
            }

        }