Несколько кнопок 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");
}
});
Это работает, но я пишу этот же код для каждой отдельной кнопки на калькуляторе. Как вы можете себе представить, это очень избыточно. В любом случае я могу написать этот код более эффективным способом? Один из них заключается в том, что вы не пишете этот метод для каждой отдельной кнопки?
Ответы
Ответ 1
Вам просто нужно выполнить следующие шаги, чтобы упростить...
Вам не нужно писать новый onClickListener
для Every Button
... Just Implement View.OnClickLister
для вашего Activity
/Fragment
.. он реализует новый метод под названием onClick()
для обработки onClick События для Button
, TextView` и т.д.
- Внесите
OnClickListener()
в Activity
/Fragment
public class MainActivity extends Activity implements View.OnClickListener {
}
- Внедрить метод onClick() в ваш Activity/Fragment
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
Это упростит обработку многих событий нажатия кнопок и упрощает их управление...
Ответ 2
Вы можете установить свойство:
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
}
}
Ответ 3
Я создал выделенный класс, который реализует 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
private ButtonClickListener onClickBtnListener = new ButtonClickListener();
а затем установите onClickListener для кнопки
btn.setOnClickListener(onClickBtnListener);
Ответ 4
Установите тег на каждой кнопке на то, с чем вы хотите работать, в этом случае, возможно, Integer. Затем для всех ваших кнопок нужен только один 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);
Ответ 5
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);
}
}
}
Ответ 6
У меня была аналогичная проблема, и я сделал следующее:
Создайте массив кнопок
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- Если у кого-нибудь есть лучший способ вызвать всю кнопку onClick, сделайте комментарий.
Ответ 7
Внедрить метод onClick() в вашей деятельности/фрагменте
Открытый класс MainActivity extends Activity реализует View.OnClickListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public void onClick(View v) {
switch (itemId) {
//если вы вызываете этот фрагмент с помощью панели навигации, которая затем используется.
case R.id.nav_menu1:
fragment = new IntroductionFragment();
break;
//если используется активность вызова с помощью панели навигации.
case R.id.nav_menu6:
Intent i = new Intent(MainActivity.this, YoutubeActivity.class);
startActivity(i);
// default method for handling onClick Events..
}
}
Ответ 8
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;
}
}
Ответ 9
Вы можете использовать это
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);
}
Вы можете идентифицировать представления в своей деятельности отдельным методом.
Ответ 10
Я считаю, что использование длинной цепочки if/else (или переключателя) в дополнение к списку findViewById(btn).setOnClickListener(this)
является уродливым. как насчет создания новых View.OnlickListeners с переопределением, встроенным:
findViewById(R.id.signInButton).setOnClickListener(new View.OnClickListener()
{ @Override public void onClick(View v) { signIn(); }});
findViewById(R.id.signOutButton).setOnClickListener(new View.OnClickListener()
{ @Override public void onClick(View v) { signOut(); }});
findViewById(R.id.keyTestButton).setOnClickListener(new View.OnClickListener()
{ @Override public void onClick(View v) { decryptThisTest(); }});
findViewById(R.id.getBkTicksButton).setOnClickListener(new View.OnClickListener()
{ @Override public void onClick(View v) { getBookTickers(); }});
findViewById(R.id.getBalsButton).setOnClickListener(new View.OnClickListener()
{ @Override public void onClick(View v) { getBalances(); }});