有人知道如何在不使用匿名内部类的情况下制作以下代码吗?
final Button button = (Button) findViewById(R.id.button_id);
button.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// Perform action on click
}
});
答案 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
}
}