0

選択した状態を無効にする必要がある 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>

2番目の編集:

マウスのホバー状態でも同じ問題がありましたが、回避策があるようです:

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

1 に答える 1

0

アイテムが選択されないようにするかどうかはわかりません。または、アイテムの選択に伴う視覚的プロパティを単に防止します。

視覚的な側面を処理する。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()

}

理論的には、これにより、レンダラーが選択状態になるのを防ぐことができます。

于 2013-10-17T12:45:26.020 に答える