多个button的OnClickListener()机器人

我目前正在Android上制作一个简单的计算器应用程序。 我试图设置代码,以便当一个数字button被按下时,它用这个数字更新计算器屏幕。 目前我正在这样做。

Button one = (Button) findViewById(R.id.oneButton); one.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { TextView output = (TextView) findViewById(R.id.output); output.append("1"); } }); 

它的工作原理,但我正在为计算器上的每个button编写相同的代码。 你可以想象这是非常多余的。 无论如何,我可以用更有效的方式编写这些代码吗? 一个涉及不写每个单一button的这种方法?

您只需简单地按照这些步骤使其变得容易…

您不必为每个Button编写新的View.OnClickLister …只需将View.OnClickLister实现到Activity / Fragment ,它将实现一个名为onClick()新方法,用于处理Button ,TextView等onClick事件。

  1. Activity / Fragment实现OnClickListener()
 public class MainActivity extends Activity implements View.OnClickListener { } 
  1. 在Activity / Fragment中实现onClick()方法
 public class MainActivity extends Activity implements View.OnClickListener { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } @Override public void onClick(View v) { // default method for handling onClick Events.. } } 
  1. 实现OnClickListener()button
 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.your_layout); Button one = (Button) findViewById(R.id.oneButton); one.setOnClickListener(this); // calling onClick() method Button two = (Button) findViewById(R.id.twoButton); two.setOnClickListener(this); Button three = (Button) findViewById(R.id.threeButton); three.setOnClickListener(this); } 
  1. 通过Id查找button并执行您的代码
 @Override public void onClick(View v) { switch (v.getId()) { case R.id.oneButton: // do your code break; case R.id.twoButton: // do your code break; case R.id.threeButton: // do your code break; default: break; } } 

请参阅此链接以获取更多信息:

https://androidacademic.blogspot.in/2016/12/multiple-buttons-onclicklistener-android.html

这将更容易处理许多button点击事件,并使其看起来很简单,pipe理它…

你可以设置属性:

 android:onClick="buttonClicked" 

在每个button的xml文件中,并在java代码中使用它:

 public void buttonClicked(View view) { if (view.getId() == R.id.button1) { // button1 action } else if (view.getId() == R.id.button2) { //button2 action } else if (view.getId() == R.id.button3){ //button3 action } } 

我创build了实现View.OnClickListener的专用类。

 public class ButtonClickListener implements View.OnClickListener { @Override public void onClick(View v) { Toast.makeText(MainActivity.this, "Button Clicked", Toast.LENGTH_SHORT).show(); } } 

然后,我在MainActivity中创build了这个类的一个实例

 private ButtonClickListener onClickBtnListener = new ButtonClickListener(); 

然后设置onClickListenerbutton

 btn.setOnClickListener(onClickBtnListener); 

在每个button上设置一个标签,无论你想使用什么,在这种情况下可能是一个整数。 那么你只需要一个OnClickListener就可以得到所有的button:

 Button one = (Button) findViewById(R.id.oneButton); Button two = (Button) findViewById(R.id.twoButton); one.setTag(new Integer(1)); two.setTag(new Integer(2)); OnClickListener onClickListener = new View.OnClickListener() { @Override public void onClick(View v) { TextView output = (TextView) findViewById(R.id.output); output.append(v.getTag()); } } one.setOnClickListener(onClickListener); two.setOnClickListener(onClickListener); 
 public class MainActivity extends AppCompatActivity implements OnClickListener { Button b1,b2; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); b1= (Button) findViewById(R.id.button); b2= (Button) findViewById(R.id.button2); b1.setOnClickListener(this); b2.setOnClickListener(this); } @Override public void onClick(View v) { if(v.getId()==R.id.button) { Intent intent=new Intent(getApplicationContext(),SignIn.class); startActivity(intent); } else if (v.getId()==R.id.button2) { Intent in=new Intent(getApplicationContext(),SignUpactivity.class); startActivity(in); } } } 
  you can do like this TextView output = (TextView) findViewById(R.id.output); one.setOnClickListener(youractivity.this); // set the onclicklistener for other buttons also @Override public void onClick(View v) { int id = v.getId(); switch(id) { case R.id.oneButton: append("1",output); break; case R.id.twoButton: append("2",output); break; case R.id.threeButton: append("3",output); break; } } private void append(String s,TextView t){ t.setText(s); } you can identify the views in your activity in a seperate method. Hope this will help you. 

我有一个类似的问题,我做的是:创build一个button的数组

 Button buttons[] = new Button[10]; 

然后实现点击监听器和引用xml id的我使用了这样一个循环

 for (int i = 0; i < 10; i++) { String buttonID = "button" + i; int resID = getResources().getIdentifier(buttonID, "id", "your package name here"); buttons[i] = (Button) findViewById(resID); buttons[i].setOnClickListener(this); } 

但是调用起来与Prag的回答点4相同。PS-如果有人有更好的方法来调用所有button的onClick,请发表评论。

在Activity / Fragment中实现onClick()方法public class MainActivity extends Activity implements View.OnClickListener {

 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } @Override public void onClick(View v) { 

开关(itemId){

//如果你用nevigation bar调用片段然后使用。

  case R.id.nav_menu1: fragment = new IntroductionFragment(); break; 

//如果使用nevigation bar调用活动

  case R.id.nav_menu6: Intent i = new Intent(MainActivity.this, YoutubeActivity.class); startActivity(i); // default method for handling onClick Events.. } 

}

 public void onClick(View v) { int id = v.getId(); switch (id){ case R.id.button1: //do ur code Toast.makeText(this,"This is button 1",Toast.LENGTH_SHORT).show(); break; case R.id.button2: Intent intent = new Intent(this,SecondActivity.class); Intent.putExtra("key",value); startActivity(intent); break; case R.id.button3: //do ur code break; case R.id.button4: //do ur code; break; default: //do ur code; } }