在不使用匿名内部类的情况下制作Android按钮

时间:2015-08-26 12:13:33

标签: java android

有人知道如何在不使用匿名内部类的情况下制作以下代码吗?

final Button button = (Button) findViewById(R.id.button_id);
     button.setOnClickListener(new View.OnClickListener() {
         public void onClick(View v) {
             // Perform action on click
         }
     });

4 个答案:

答案 0 :(得分:2)

如果您想在不同的活动中重复使用它,您也可以编写自己的实现View.OnClickListener的类。

class MyListener implements OnClickListener {
    @Override
    public void onClick(final View v) {
        // do something
    }
}

然后通过

使用它
button.setOnClickListener(new MyListener());

或创建一个MyListener对象,您可以重复使用:

MyListener myListener = new MyListener();
// ...
button.setOnClickListener(myListener);

答案 1 :(得分:1)

您可以使用按钮的android:onClick="anyMethodName"属性 在您的布局文件中,例如:

        <Button
                android:id="@+id/button_id"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:onClick="myMethod"
                android:text="Update" />

并在您的类中创建一个具有相同名称的方法:

public void myMethod(View v){  // must use same name as in XML

  // Perform action on click, this works like onClick() of anonymous inner class
  Toast.makeText(this, "button clicked", Toast.LENGTH_SHORT).show();

}

在上面的方法中,只要把你想要放在onClick()匿名内部类中的任何东西放进去,它就像魅力一样。

另一种方法是实现OnClickListener接口,然后简单地将所有逻辑放在一个onClick(View v)方法中,方法是注册它的监听器:

button.setOnClickListener(this);

答案 2 :(得分:1)

还可以选择Activity / Fragment实施OnClickListener。然后,您可以使用开关案例来检查已单击的视图的ID并执行所需的逻辑。

答案 3 :(得分:0)

为什么不想要一个匿名的内部类?如果是代码风格问题,您可以尝试使用ButterKinfe

以下是一个如何在Activity中使用的示例(您也可以在任何其他类中使用它)

public class MainActivity extends Activity {

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ButterKinfe.inject(this); // This is where the listeners on set on the views
    }

    // Simple use case
    @OnClick(R.id.button_id)
    void onButtonClicked() {
        //Do something with button
    }

    // If you want the view paramater in the callback just add it!
    @OnClick(R.id.other_button_id)
    void onOtherButtonClicked(View otherButton) {
        //Do something with button
    }

}