2012年9月7日金曜日

ボタンに対するイベントの付与(解決編)

前回、ボタンのイベントを付与してみましたが、

Android上で確認できないという形のまま終了してしまいました。

今回、続けて調査を行ったところ、若干の修正を行えばメッセージを表示できることが確認できました。

前回の記述では、Curlの記述に合わせて、CommandButtonを生成するタイミングで、Actionイベントを付与していました。

            {CommandButton
                name = "cb",
                label = "ボタンです。",
                {on Action do
                    {popup-message "ボタンを押下しました。"}
                    {show-toast "ボタンを押下しました。"}
                }
            }

この形だと、どうやらAndroid上では正しく動作しないようです。

この問題については、CommandButtonの「add-event-handler」メソッドでイベントを付与する形の記述をすることで、解決することができました。

<修正したload.scurl>

{import * from COM.CURL.CAEDE.GUI}

{define-class public ColorSampleGraphic {inherits Frame}

  {constructor public {default}
    {construct-super
        {VBox
            name = "vbox",
            width = 300px,
            height = 500px,
            background = "#FF0000",
            {CommandButton
                name = "cb",
                label = "ボタンです。"
            }
        }
    }
  }

}

|| ロジッククラス
{define-class public ColorSampleScreen
  {inherits {Screen-of ColorSampleGraphic}}

  {constructor public {default}
    def vbox = {self.find-graphic-by-name "vbox"} asa VBox
    def cb = {self.find-graphic-by-name "cb"} asa CommandButton
    {cb.add-event-handler
        {on Action do
            {popup-message "ボタンを押下しました。"}
            {show-toast "ボタンを押下しました。"}
        }
    }
  }
}

{client {screen-graphic-reference "colorsample", ColorSampleGraphic}}

ColorSampleGraphicクラス内のCommandButtonに対して設定していた on Action do をColorSampleScreenクラスに移動しました。

さらに、ColorSampleScreenクラス内で、VBox、CommandButton共にfind-graphic-by-nameで取得しないと、
レイアウト上に表示されないという事も発覚しました。

上記の修正を行って実行すると、

popup-message、show-toast共に正しく出力できるということがわかりました。
元々popup-messageでもメッセージの出力ができたのですね。
これは実際に使う際に、余計な考慮がいらなくなるため、ありがたいです。

今回の調査の結果、

  1. イベントの付与は、add-event-handlerで行う。
  2. Screenクラスでfind-graphic-by-nameをする際には、レイアウト全てを取得する。
という2点がわかりました。こちらは今後も使うと思うのでちゃんと覚えておかないといけないですね。

とりあえず、popup-message/show-toast共に動作が確認できたのでよかったです。

ではでは。



0 件のコメント:

コメントを投稿