169 похожих чатов

Всем привет, и всех с праздником! С помощью интента запускаю новую

активность. В ресайклере у ImageView у всех одинаковый OnClick, тк запускается анимация нажатия. В джава-коде Onclick обрабатываю, и там же хочу запустить новую активность. Активность зависит от нажатой кнопки. Единственный вариант проверки, какая кнопка нажата, придумал получать имя background-а ImageView и через свитч запускать активность. Похоже на лютый говнокод, как лучше сделать?

21 ответов

16 просмотров

это не похоже, это оно и есть

Вы смешиваете визуальную часть с бизнес-логикой. Если в activity нужно грузить картинку по названию, то передавайте в функцию название картинки, а не какое-то view из которого как-то нужно выковыривать название.

Andrey-Karchevsky Автор вопроса

Мне нужно по нажатию на ImageView просто запускать активность. Проблема была в том, что ImageView генерились из кода, и я только сейчас нагуглил, как там задать у них ID

Если нужно "просто запускать", то какая разница какой там id?

Andrey-Karchevsky Автор вопроса

Так от ID зависит, какая активность будет запущена

Ну, можно и так...

Andrey-Karchevsky Автор вопроса
Andrey-Karchevsky Автор вопроса

Что-то я не так сделал: В onBindViewHolder в цикле через 'img.setId()' задаю id от 0 до 5. В MainActivity следующий код (скрин). При нажатии на кнопку, приложение вылетает, трейс (скрин)

Во-первых, у вас startActivity вызывается в каждом case и ещё один раз на выходе. Оставьте вызов на выходе.

Andrey-Karchevsky Автор вопроса

Наоборот же, только на выходе вызывается, в кейсах только интент получаю

Я на скриншоте вижу - много их.

Andrey-Karchevsky Автор вопроса

А, да, у первых двух забыл убрать, извиняюсь

Почему onClick падает - я 🤷‍♂, наверное назначен не там и не так. Подозреваю, что в лейауте.

ты в xml устанавливаешь онклик чтоли?

Andrey-Karchevsky Автор вопроса

Падает, если тут начинаю задавать setId()

зачем?

id не для этого Если нужно привязать свои данные, то используй tag. А вообще, если приходится извращаться, то что-то однозначно делается не так.

если я правильно понял что ты хочешь сделать, то решается все своими листенерами которые вешаешь на кнопки

Andrey-Karchevsky Автор вопроса

Даааа, понял наконец-то, tag помог. Да, я понимаю, что сделал криво, сейчас попробую нормально

Там типа заранее неизвестно число кнопок.

Andrey-Karchevsky Автор вопроса

Сейчас попробую, спасибо за помощь!

Похожие вопросы

Обсуждают сегодня

30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
Всем привет! Имеется функция: function IsValidChar(ch: UTF8Char): Boolean; var i: Integer; ValidChars: AnsiString; begin ValidChars := 'abcdefghijklmnopqrstuvwxyzABCDE...
Евгений
44
Карта сайта