是否可以让多个按钮调用相同的方法?我的意思是参数将是按钮的ID。我的问题是我有一个非常非常长的开关案例功能,每个案例都有相同的方法。这是我的代码片段(我缩短了它):
public class HerkunftRind extends Activity implements View.OnClickListener, Animator.AnimatorListener {
private static final String TAG = "HerkunftRind";
ViewFlipper viewFlipper;
ImageButton myButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.herkunft_rind);
viewFlipper = (ViewFlipper) findViewById(R.id.herkunft_rinder_view_flipper);
ImageButton imageButton = null;
imageButton = (ImageButton) findViewById(R.id.button_1);
imageButton.setOnClickListener(this);
imageButton = (ImageButton) findViewById(R.id.button_2);
imageButton.setOnClickListener(this);
imageButton = (ImageButton) findViewById(R.id.button_3);
imageButton.setOnClickListener(this);
imageButton = (ImageButton) findViewById(R.id.button_4);
imageButton.setOnClickListener(this);
}
public void setAnimationFade(int id) {
myButton = (ImageButton) findViewById(id);
ObjectAnimator animator = ObjectAnimator.ofFloat(myButton, View.ALPHA, 0.5f, 1f);
animator.setDuration(300); //ms
animator.start();
animator.addListener(this);
}
@Override
public void onAnimationStart(Animator animation) {
myButton.setAlpha(1f);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.button_1: {
setAnimationFade(R.id.button_1);
text = (TextView) findViewById(R.id.button_1_text_1);
text.setVisibility(View.VISIBLE);
text = (TextView) findViewById(R.id.button_1_text_2);
text.setVisibility(View.VISIBLE);
break;
}
case R.id.button_2: {
setAnimationFade(R.id.button_2);
text = (TextView) findViewById(R.id.button_2_text_1);
text.setVisibility(View.VISIBLE);
text = (TextView) findViewById(R.id.button_2_text_2);
text.setVisibility(View.VISIBLE);
break;
}
case R.id.button_3: {
setAnimationFade(R.id.button_3);
text = (TextView) findViewById(R.id.button_3_text_1);
text.setVisibility(View.VISIBLE);
text = (TextView) findViewById(R.id.button_3_text_2);
text.setVisibility(View.VISIBLE);
break;
}
case R.id.button_4: {
setAnimationFade(R.id.button_4);
text = (TextView) findViewById(R.id.button_4_text_1);
text.setVisibility(View.VISIBLE);
text = (TextView) findViewById(R.id.button_4_text_2);
text.setVisibility(View.VISIBLE);
break;
}
我不想要的是直接在XML文件中定义它。我可以缩短它吗?
答案 0 :(得分:2)
是的,你可以,我个人经常这样做 您可以在xml布局中调用该方法。
即:
<Button
android:onClick="myMethod()"
/>
请注意myMethod()
必须具有类似
public void myMethod(View v)
在myMethod中,您可能想要识别哪个是您点击的视图(也可以是异构),然后采取相应的行动。
只需添加switch()
,您可以使用v.getId()
来确定触发事件的视图。
这样的事情:
switch(v.getId())
{
case R.id.txtPhone:
{
// Do something
// ...
break;
}
case R.id.txtMenu:
{
// Show options menu
// ...
break;
}
// ...
default:
{
break;
}
}
答案 1 :(得分:1)
这里有点多余:
public void onClick(View v) {
switch (v.getId()) {
case R.id.button_1: {
setAnimationFade(R.id.button_1);
text = (TextView) findViewById(R.id.button_1_text_1);
text.setVisibility(View.VISIBLE);
text = (TextView) findViewById(R.id.button_1_text_2);
text.setVisibility(View.VISIBLE);
break;
}
case R.id.herkunft_rinder_bauer2_button: {
setAnimationFade(R.id.button_2);
text = (TextView) findViewById(R.id.button_2_text_1);
text.setVisibility(View.VISIBLE);
text = (TextView) findViewById(R.id.button_2_text_2);
text.setVisibility(View.VISIBLE);
break;
}
...
为什么你不在空洞切换案例之前调用setAnimationFade .. ??
public void onClick(View v) {
setAnimationFade(v.getId());
switch (v.getId()) {
case R.id.button_1: {
setAnimationFade(R.id.button_1
答案 2 :(得分:1)
如果您不想使用长onClick
方法,那么您可以为每个按钮编写一个onClick
侦听器。
例如:
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
}
});
anotherButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
}
});