Apache flex “火花”列表上的flex阻止选择状态

Apache flex “火花”列表上的flex阻止选择状态,apache-flex,itemrenderer,flex-spark,Apache Flex,Itemrenderer,Flex Spark,我有一个ItemRenderer,其中选定的状态应该被禁用(我使用的是渲染器状态,而我没有选定的状态)。 问题是,列表(spark)会在单击时重置项目渲染器状态,即使我没有“选定”状态 我想完全防止这种行为,但我不知道怎么做。 “我的渲染器”的AutoDruckGround设置为false,但必须启用它(尽管enabled=false修复了此问题) 此外,渲染器还有几个子级,包括它自己的列表。 在渲染器上设置mouseEnabled=“false”会修复渲染器本身,但不会修复其子级,我需要一些子

我有一个ItemRenderer,其中选定的状态应该被禁用(我使用的是渲染器状态,而我没有选定的状态)。 问题是,列表(spark)会在单击时重置项目渲染器状态,即使我没有“选定”状态

我想完全防止这种行为,但我不知道怎么做。 “我的渲染器”的AutoDruckGround设置为false,但必须启用它(尽管enabled=false修复了此问题) 此外,渲染器还有几个子级,包括它自己的列表。 在渲染器上设置mouseEnabled=“false”会修复渲染器本身,但不会修复其子级,我需要一些子级启用鼠标

编辑:

以下是我的项目渲染器的摘录:

<?xml version="1.0" encoding="utf-8"?>
<s:ItemRenderer xmlns:fx="http://ns.adobe.com/mxml/2009" 
                xmlns:mx="library://ns.adobe.com/flex/mx" 
                xmlns:s="library://ns.adobe.com/flex/spark"
                width="100%" autoDrawBackground="false">

    <s:states>
        <s:State name="normal" />
        <s:State name="suitable" />
        <s:State name="mine" />
        <s:State name="deleted" />
    </s:states>

    <s:Rect id="rect" top="0" right="0" bottom="0" left="0">
        <s:fill>
            <s:SolidColor id="background"
                          alpha=".8" alpha.deleted=".4"
                          color="0xff0000" color.suitable="0x00ff00" color.mine="0x0000ff" />
        </s:fill>
    </s:Rect>

    <s:Label id="name" left="4" top="4" right="40" />

    <s:List id="myList" left="4" top="40" right="4"
            contentBackgroundAlpha="0" borderVisible="false" horizontalScrollPolicy="off">
        <s:layout>
            <s:VerticalLayout gap="3" paddingBottom="4" requestedMinRowCount="2" />
        </s:layout>
    </s:List>
</s:ItemRenderer>

我不清楚您是否希望阻止选择某个项目;或者只是阻止与所选项目一起出现的视觉属性

处理视觉方面的问题;我将尝试重写getCurrentRenderState()方法。大概是这样的:

override protected function getCurrentRendererState():String{
  if (selected && hasState("selected"))){
    return "normal"; // or whatever state you want it to be
  }
  if (selected && down && hasState("downAndSelected")){
     return "normal"; // or whatever state you want it to be
  }        

  super.getCurrentRendererState()

}

从理论上讲,这应该可以防止渲染器进入选定状态。

你能发布渲染器的代码吗?可能是@splash的副本,我看过这篇文章,但添加“更改”事件并不能解决我的问题issue@Lee,我已经用相关代码更新了问题。谢谢@rebog,我也看到了这个理论,但它不起作用。此外,我希望hasState(“selected”)返回false,但这是另一回事了……所选状态仍然存在于渲染器中。您的渲染器扩展了ItemRenderer,因此您继承了它的属性(包括状态),从而导致hasState(“selected”)==trueTrue,但不应该覆盖先前定义的任何状态?这和mxml代码不一样吗?@LeeBurrows我刚刚检查了层次链中的所有文件。我看不到ItemRenderer类中状态数组的设置位置。我的意图是使用上述代码表示“如果状态为X'返回Y”;我认为这会改变视觉显示;但也许我遗漏了一个重要方面[我确实是在没有测试代码的浏览器中编写的]@rebog抱歉混淆;我的评论是针对Ofir对你的回答的第一反应(我觉得这很合理)。
override protected function getCurrentRendererState():String{
  if (selected && hasState("selected"))){
    return "normal"; // or whatever state you want it to be
  }
  if (selected && down && hasState("downAndSelected")){
     return "normal"; // or whatever state you want it to be
  }        

  super.getCurrentRendererState()

}