Несколько кнопок ' OnClickListener () android
в настоящее время я делаю простой калькулятор приложение на Android. Я пытаюсь настроить код так, чтобы при нажатии кнопки с номером он обновлял экран калькулятора с этим номером. В настоящее время я делаю это так.
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");
}
});
это работает, но я пишу этот же код для каждой кнопки на калькуляторе. Как вы можете себе представить, это очень избыточно. Есть ли в любом случае я могу написать этот код более эффективным способом? Тот, который включает в себя не писать этот метод для каждого отдельного Баттон?
9 ответов:
вы просто должны следовать этим шагам, чтобы сделать его легким...
вы не должны писать новые
onClickListener
для каждогоButton
... Просто РеализоватьView.OnClickLister
наActivity
/Fragment
.. он будет реализовывать новый метод под названиемonClick()
для обработки событий onClick дляButton
,виджет TextView, и т. д.
- реализовать
OnClickListener()
в своемActivity
/Fragment
public class MainActivity extends Activity implements View.OnClickListener { }
- реализовать метод 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.. } }
- реализовать
OnClickListener()
Для Кнопки@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); }
- найти кнопки по идентификатору и реализовать свой код..
@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
это позволит легче обрабатывать многие кнопки нажмите события и делает его выглядит просто управлять им...
Вы можете установить свойство:
android:onClick="buttonClicked"
в 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 } }
Я создал класс, который реализует просмотр.OnClickListener.
public class ButtonClickListener implements View.OnClickListener { @Override public void onClick(View v) { Toast.makeText(MainActivity.this, "Button Clicked", Toast.LENGTH_SHORT).show(); } }
затем я создал экземпляр этого класса в MainActivity
private ButtonClickListener onClickBtnListener = new ButtonClickListener();
а затем установить onClickListener для кнопки
btn.setOnClickListener(onClickBtnListener);
установите тег на каждой кнопке на все, с чем вы хотите работать, в этом случае, вероятно, целое число. Тогда вам нужен только один OnClickListener для всех ваших кнопок:
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.
у меня была похожая проблема и что я сделал: Создайте массив кнопок
Button buttons[] = new Button[10];
затем для реализации на click listener и ссылки 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); }
но вызов их остается таким же, как и в пункте 4 ответа Прага. PS-Если у кого-то есть лучший способ вызвать все кнопки onClick, пожалуйста, прокомментируйте.
реализовать метод onclick() в вашей деятельности/фрагмент открытый класс MainActivity расширяет действие реализует представление.OnClickListener {
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } @Override public void onClick(View v) {
switch (itemId) {
// Если вы вызываете фрагмент с nevigation bar, то используется.
case R.id.nav_menu1: fragment = new IntroductionFragment(); break;
// при активном звонке с баром nevigation потом привык.
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; } }