写一个优雅的点击处理程序

Ace*_*oud 2 java gwt android

我们通常按以下方式在按钮上(在GWT或Swing或Android中)编写一个单击处理程序(方式1).

class A {

    public void myMethod() {

        int count = 0 ;

        Button myButton = new Button("x");
        myButton.addClickHandler(new ClickHandler() {
          public void onClick(ClickEvent event) {
              count = 1 ;
          }

        });

    }
}
Run Code Online (Sandbox Code Playgroud)

但是,我们也可以为click处理程序编写一个不同的类,并按照以下方式实现它(方式2):

class A implements ButtonClickInterface {

    int count ;
    public void myMethod() {

        count = 0 ;

        Button myButton = new Button("x");
        myButton.addClickHandler(new MyClickHander(this));

    }

    @Override
    public void buttonClicked() {
        count = 1 ;        
    }
}

interface ButtonClickInterface {
    public void buttonClicked() ;
}

class MyClickHandler implements ClickHandler {


    ButtonClickInterface buttonClickInterface ;

    public MyClickHandler(ButtonClickInterface buttonClickInterface) {
        this.buttonClickInterface = buttonClickInterface ;
    }

    @Override
    public void onClick(ClickEvent event) {
        buttonClickInterface.buttonClicked() ;         
    }

}
Run Code Online (Sandbox Code Playgroud)

在这里,我必须count作为一个类变量.这有什么缺点吗?上述实现方式还有其他任何缺点吗?在复杂性,耦合,创建的对象数量和代码可读性方面,我实现ClickHandler的两种方式如何相互对立?

Zel*_*ion 5

您还可以在xml中定义clickHandler.

把它放在你的Activity类中:

public void myClickEvent(View view) {
    //Do something
}
Run Code Online (Sandbox Code Playgroud)

并将其放在您的布局.xml中:

<Button
        android:id="@+id/myId"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button1"
        android:onClick="myClickEvent"/>
Run Code Online (Sandbox Code Playgroud)