0

ユーザーにボタンをクリックしてもらいたいのですが、「トースト」メッセージポップアップが表示され、フェードアウトします。その後、ボタンクリックが実行するアクションが実行されます。これを行うための最良の方法は何ですか?クリックイベントをキャッチしてタイマーをトリガーし(トーストが表示されている間)タイムアウトさせてから、処理コードを呼び出す必要がありますか、それともイベント処理に使用できる遅延メカニズムが組み込まれていますか?トーストをイベントの取り扱いに一切関与させたくない

4

2 に答える 2

1

私が本当にあなたの要件に従うならば、次のコードはするべきです:

// interface of the "Toast" no matter what the implementation actually is
public interface Toast
{
    void open( String message );
    void closeFadingAway();
}

// calling code
public class ClientCode
{
    private static final int myDelay = 1000; // 1 second in millis
    private Toast myToast;

    void onMyAction()
    {
        myToast.open( "Your action is being handled..." );
        Scheduler.get().scheduleFixedDelay( new RepeatingCommand()
        {
            @Override
            public boolean execute()
            {
                myToast.closeFadingAway();
                performAction();
                return false; // return false to stop the "repeating" = executed only once
            }
        }, myDelay );
    }

    void performAction()
    {
        // do something interesting
    }
}

さて、ユーザーがトーストのボタンを押したときにアクションを中断できるようにするつもりなら、これは別の話です。

于 2013-03-27T19:16:27.037 に答える
0

ポップアップパネルを使用している場合は、ポップアップパネルでaddCloseHandlerを使用し、ここから、ボタンによって呼び出されるはずのメソッドを呼び出すことができます。

popUpPanel.addCloseHandler(new CloseHandler<PopupPanel>(){
@Override
public void onClose(CloseEvent<PopupPanel> event) {
    // TODO Do the closing stuff here

}
});

したがって、PopupPanelが消えて、closeイベントがトリガーされると、そこで魔法をかけることができます。

于 2013-03-27T14:18:13.537 に答える