2

クラスで定義されたクリック ハンドラー メソッドがあります。画面上のキャンセル ボタンがクリックされた場合に、特定のメソッドを呼び出そうとしています。ここにコードスニペットがあります -

    boolean tempCheck;

    @Override
    protected void onBind() {

    super.onBind();

    ...
    ...

    getViewName().getVar().addClickHandler(new ClickHandler() {

    @Override
    public void onClick(final ClickEvent event) {

    //Doing some operation and making tempCheck true

    tempCheck = true;       

    }
    });


    If(tempCheck){

    this.box.getButtonName().addClickHandler(new ClickHandler() {
        @Override
        public void onClick(final ClickEvent event) {

        this.box.hide();
        this.getViewName().hide();
    }
    });

    } else {


    this.callToMethodA();

    }

}

ボタンがクリックされると、tempCheck ブール変数が true になります。

tempCheck = true;

ただし、条件が失敗した場合は、常に else 部分に入ります。

If(温度チェック)

なぜこれが起こっているのですか?これは、Java がクロージャーを管理する方法によるものですか? 注 : this.callToMethodA() は他のクリック ハンドラでも使用されるため、条件がブロックの外にある必要がある場合。

4

2 に答える 2

3

を呼び出すとaddClickHandler()、ハンドラーが作成され、すぐに次のステートメント (If(tempCheck)この場合) が続行されます。あなたが想定しているように、ボタンがクリックされるのを待ちません。したがってtempCheck、この時点では常に false になります。

ボタンがクリックされた後に実行するコードは、onClick()メソッド内、または から呼び出すメソッド内に配置する必要がありますonClick()

于 2013-09-02T04:10:14.873 に答える
0

イベント処理についてのあなたの考え方は間違っています.....onClick()閉じるボタンをクリックしたときに実行したい機能を「それ自体の中に」書く必要があります。 ...あなたは内部でやりたい機能を実行してonClick() いません。理解していただければ幸いです....これを理解していなくても....一度考えてみてください...あなたのばかげた間違いを知ることができます.. .

于 2013-09-03T08:24:35.973 に答える