Один обработчик клика на несколько кнопок

| 30.06.2014

Иногда на экране вполне может оказаться несколько кнопок, но при этом, они вполне могут иметь один общий обработчик клика. Ниже мы рассмотрим пример, как можно это реализовать.

Мы создадим приложение, в котором на экран поместим две кнопки. Также мы создадим один обработчик нажатия на кнопку, который «навесим» на каждую из кнопок. В логах мы будем выводить информацию о нажатой кнопке.

Итак, код layout — res/layouts/activity_main.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal">
 
    <Button
        android:id="@+id/btn1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/btnText1" />
 
    <Button
        android:id="@+id/btn2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/btnText2" />
 
</LinearLayout>

Добавим строковые ресурсы для кнопок — res/values/strings.xml:

1
2
3
4
5
6
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="app_name">OnClick</string>
    <string name="btnText1">Кнопка 1</string>
    <string name="btnText2">Кнопка 2</string>
</resources>

Файл MainActivity.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
package ru.androiddocs.onclick;
 
import android.support.v7.app.ActionBarActivity;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.os.Bundle;
 
 
public class MainActivity extends ActionBarActivity {
 
    protected static final String LOG_TAG = "my_tag";
    Button btn1, btn2;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        btn1 = (Button) findViewById(R.id.btn1);
        btn2 = (Button) findViewById(R.id.btn2);
 
        OnClickListener btnClk = new OnClickListener() {
 
            @Override
            public void onClick(View v) {
                switch(v.getId()) {
                    case R.id.btn1:
                        Log.d(LOG_TAG, "Это кнопка 1!");
                        break;
                    case R.id.btn2:
                        Log.d(LOG_TAG, "Это кнопка 2!");
                        break;
                    default:
                }				
            }									
        };
 
        btn1.setOnClickListener(btnClk);
        btn2.setOnClickListener(btnClk);
    }
}

Код достаточно простой. Мы создаем обработчик клика btnClk, внутри которого в методе onClick() по id определяем, какая именно кнопка была нажата. Используем переключатель switch. Информацию выводим в логи методом Log.d().

Созданный обработчик присваиваем обеим кнопкам. Тестируем.

Один обработчик клика на несколько кнопок

Один обработчик клика на несколько кнопок

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*