如果之前有人问过,请原谅我。我已经倾注了这个网站和许多其他人,似乎无法找到答案。我有一个有效的Android应用程序,但我正在尝试清理代码。我有3个按钮:
public Button button1, button2, button3;
然后,我有一个“抓住”点击的方法:
public void getButtonClick(View view)
{
switch(view.getId())
{
case R.id.button1:
// Do something button1 related here
break;
case R.id.button2:
// Do something button2 related here
break;
case R.id.button3:
// Do something button3 related here
}
}
我想知道的是,如果有任何方法我可以使用通用方法只等待按钮单击并抓取该变量,以便我可以避免多个switch-case语句。有点像:
public void oneMethodForAll(View view)
{
clkdBtn = view.getButtonThatWasClicked();
// Do stuff
}
非常感谢任何帮助。 TIA
答案 0 :(得分:1)
通常,您为不同的按钮实现不同的处理程序,因为按钮发出的动作通常是不同的。
您可以使用View
将Button
转换为View
,将Button clickedButton = (Button)view;
作为唯一参数传递到处理程序中。
{{1}}
如果您关心的只是按钮的ID,并且您的操作将基于该值,则创建单独的处理程序。
答案 1 :(得分:1)
您可以做的一件事是让活动实施View.OnClickListener
:
public class FooActivity implements View.OnClickListener {
@Override
protected void onCreate(Bundle icicle) {
Button btn1 = (Button) findViewById(R.id.button1);
btn1.setOnClickListener(this);
Button btn2 = (Button) findViewById(R.id.button2);
btn2.setOnClickListener(this);
}
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.button1:
// Button 1 was clicked
break;
case R.id.button2:
// Button 2 was clicked
break;
}
}
}
由于您没有创建一堆匿名点击处理程序,因此您可以节省一些输入,但您仍需要单独设置每个按钮的onClickListener
。
答案 2 :(得分:0)
你可以这样做:
clkdBtn = (Button)view;
通常不使用Button本身。 getButtonClick()应响应按钮按下相应的动作......我不确定你为什么需要实际的按钮视图本身。
如果您想要显示按钮的文字,可以使用:
String text = ((Button)view).getText();