【问题标题】:flex prevent selection state on spark listflex 防止火花列表上的选择状态
【发布时间】:2013-10-25 14:15:29
【问题描述】:

我有一个 ItemRenderer,其中应禁用选定状态(我正在使用渲染器状态,但我没有选定状态)。 问题是列表(火花)在单击时重置项目渲染器状态,即使我没有“选择”状态。

我想完全阻止这种行为,但我不知道怎么做。 我的渲染器将 autoDrawBackground 设置为 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>

第二次编辑:

我在鼠标悬停状态下遇到了同样的问题,但似乎有一个解决方法:

override protected function set hovered(value:Boolean) : void
{
    // do nothing (prevent current state from changing to "hovered" state)
}

【问题讨论】:

  • 你能把渲染器的代码贴出来
  • @splash,我看过这篇文章,但添加“更改”事件并没有解决我的问题
  • @Lee,我已经用相关代码更新了问题。

标签: apache-flex itemrenderer flex-spark


【解决方案1】:

我不清楚你是否想阻止一个项目被选中;或者只是阻止与选择的项目一起出现的视觉属性。

处理视觉方面;我会尝试覆盖 getCurrentRendererState() 方法。像这样的:

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()

}

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

【讨论】:

  • 感谢@Reboog,我也看到了这个理论,但它不起作用。此外,我本来希望 hasState("selected") 返回 false 但这是另一回事......
  • 所选状态仍然存在于您的渲染器中。你的渲染器扩展了 ItemRenderer 所以你继承它的属性(包括状态)导致 hasState("selected")==true
  • True 但不应该 states=["foo", "bar"] 覆盖之前定义的任何状态?不是和mxml代码一样吗?
  • @LeeBurrows 我刚刚检查了层次结构链中的所有文件。我看不到在 ItemRenderer 类中设置 states 数组的位置。我使用上面代码的意图是说“如果状态是 X',则返回 Y”;我认为这会改变视觉显示;但也许我错过了一个重要方面[我确实在没有测试代码的浏览器中编写了它]
  • @Reboog 很抱歉造成混淆;我的评论是针对 Ofir 对您的回答的第一反应(这对我来说听起来不错)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-04-22
  • 1970-01-01
  • 1970-01-01
  • 2021-12-02
  • 1970-01-01
  • 2018-09-26
  • 1970-01-01
相关资源
最近更新 更多