Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
korsaj
148 / 117 / 9
Регистрация: 16.08.2013
Сообщений: 508
#1

Обработчик нажатия для вложенных лайаутов - Android

04.08.2016, 00:09. Просмотров 163. Ответов 7
Метки нет (Все метки)

Здравствуйте!
Подскажите как определить какая кнопка вызвала OnClick, если кнопки находятся во вложенных однотипных layout-ах и соответственно их ID совпадают.


Java
1
2
3
4
5
6
7
8
9
10
11
   public void onClick(View v){
        
        int BtId = v.getId();           
        if (BtId == Check1_id){
            if (D17) Log.d(TAG, "Check1_id id = " + BtId);
            bCheck1 = true;
        }else if (BtId == Check2_id){
            if (D17) Log.d(TAG, "Check2_id id = " + BtId);
            bCheck2 = true;
        }
}

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
            View temp = (View) DialogLayout.findViewById(R.id.Line_0);
                DialogText[i][ViewParam.NAME] = (TextView) (temp.findViewById(R.id.textViewCheckText));
                DialogText[i][ViewParam.COUNT] = (TextView) (temp.findViewById(R.id.textViewCheckCount));
                if (D17) Log.v(TAG, "-- " + temp.getId() + " " + DialogText[i][ViewParam.COUNT]..getId());
                i++;
            temp = (View) DialogLayout.findViewById(R.id.Line_1);
                DialogText[i][ViewParam.NAME] = (TextView) (temp.findViewById(R.id.textViewCheckText));
                DialogText[i][ViewParam.COUNT] = (TextView) (temp.findViewById(R.id.textViewCheckCount));
                if (D17) Log.v(TAG, "-- " + temp.getId() + " " + DialogText[i][ViewParam.COUNT].getId());
                i++;
// . . . . . . . . . . . .
//Устанавливаем слушателя
DialogText[i-2][ViewParam.COUNT].setOnClickListener(ActivityMain.this);
Check1_id = DialogText[i-2][ViewParam.COUNT].getId();
if (D17) Log.i(TAG, "Check1_id = " + Check1_id);
DialogText[i-1][ViewParam.COUNT].setOnClickListener(ActivityMain.this);
Check2_id = DialogText[i-1][ViewParam.COUNT].getId();
if (D17) Log.i(TAG, "Check2_id = " + Check2_id);
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
            <include
                android:id="@+id/Line_0"
                android:layout_width="match_parent"
                android:layout_height="0dp"
                android:layout_weight="1"
                layout="@layout/frame_row" />
 
            <include
                android:id="@+id/Line_1"
                android:layout_width="match_parent"
                android:layout_height="0dp"
                android:layout_weight="1"
                layout="@layout/frame_row" />
 
            <include
                android:id="@+id/Line_2"
                android:layout_width="match_parent"
                android:layout_height="0dp"
                android:layout_weight="1"
                layout="@layout/frame_row" />
frame_row.xml
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/LinearLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal" >
    
    <TextView
        android:id="@+id/textViewCheckText"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:gravity="left|center_vertical"
        android:textSize="24sp" />
    
    <TextView
        android:id="@+id/textViewCheckCount"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:gravity="left|center_vertical"
        android:textSize="24sp" />
 
</LinearLayout>
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
REALIST07
Автор FAQ
Автор FAQ
174 / 174 / 13
Регистрация: 11.06.2010
Сообщений: 932
04.08.2016, 00:39     Обработчик нажатия для вложенных лайаутов #2
Как вариант пишешь класс с интерфейсом нажатия кнопки и в конструктор передаешь число
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Any implements View.OnClickListener {
      private int Id;
      public Any(int Id) {
          this.Id = Id;
      }
     
      @Override
      public void onClick(View v) {
         if (Id == 0) {}
          if (Id == 1) {}  
      }
      
      
  }
Передаешь так:
Java
1
DialogText[i-2][ViewParam.COUNT].setOnClickListener(new Any(ID));
Где ID - Нужное тебе число
korsaj
148 / 117 / 9
Регистрация: 16.08.2013
Сообщений: 508
04.08.2016, 10:06  [ТС]     Обработчик нажатия для вложенных лайаутов #3
Спасибо огромное. Хорошее решение, вечером реализую.
Паблито
2236 / 1809 / 563
Регистрация: 12.05.2014
Сообщений: 6,448
Завершенные тесты: 1
04.08.2016, 11:01     Обработчик нажатия для вложенных лайаутов #4
я бы все view находил и помечал через setTag() и тогда не нужно было бы никаких интерфейсов

названия переменных в коде выше не по конвенции и вызывают тошноту
korsaj
148 / 117 / 9
Регистрация: 16.08.2013
Сообщений: 508
04.08.2016, 11:14  [ТС]     Обработчик нажатия для вложенных лайаутов #5
Цитата Сообщение от Паблито Посмотреть сообщение
названия переменных .. вызывают тошноту
Будет отравление - милости просим, вместо марганцовки )))
А так, спс за критику.
Дайте ссылку на норм рекомендации по "конвенции" - с удовольствием почитаю.
Hank
49 / 40 / 3
Регистрация: 28.12.2011
Сообщений: 229
04.08.2016, 11:25     Обработчик нажатия для вложенных лайаутов #6
Цитата Сообщение от korsaj Посмотреть сообщение
Дайте ссылку на норм рекомендации по "конвенции"
"Совершенный код" Стив Макконнелл (не реклама)
Паблито
2236 / 1809 / 563
Регистрация: 12.05.2014
Сообщений: 6,448
Завершенные тесты: 1
04.08.2016, 11:32     Обработчик нажатия для вложенных лайаутов #7
Цитата Сообщение от korsaj Посмотреть сообщение
рекомендации по "конвенции" - с удовольствием почитаю.
https://www.google.com.ua/search?q=j...ng+conventions
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.08.2016, 11:36     Обработчик нажатия для вложенных лайаутов
Еще ссылки по теме:

Android Обработчик OnClickListener
Кнопка в listView и обработчик нажатия Android
Android Один обработчик для динамических кнопок
Android Один обработчик для нескольких switch
Android Взаимодействие вложенных фрагментов

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
korsaj
148 / 117 / 9
Регистрация: 16.08.2013
Сообщений: 508
04.08.2016, 11:36  [ТС]     Обработчик нажатия для вложенных лайаутов #8
Спс гуглом умею пользоваться, читаю..
Yandex
Объявления
04.08.2016, 11:36     Обработчик нажатия для вложенных лайаутов
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru