Простой вопрос - один обработчик клика на несколько кнопок
Простой вопрос - один обработчик клика на несколько кнопок
Есть несколько почти одинаковых кнопок в диалоге, нужно на них повесить один слушатель , различия в одной подставляемой строчке.
Как это сделать одной процедурой,а не несколькими? Только не используя switch и подобное.
Как это сделать одной процедурой,а не несколькими? Только не используя switch и подобное.
R.id.team
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
Re: Простой вопрос - один обработчик клика на несколько кноп
без свитча никак, и почему он вам не нравится? как вы будете различать какой айди обрабатывать? ифами что ли?
R.id.team
Политика на форуме запрещена
Политика на форуме запрещена
Re: Простой вопрос - один обработчик клика на несколько кноп
Да мне все равно какой айди
По view буду узнавать какая кнопочка нажата. Мне всего лишь одно ее свойство надобно.
По view буду узнавать какая кнопочка нажата. Мне всего лишь одно ее свойство надобно.
R.id.team
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
Re: Простой вопрос - один обработчик клика на несколько кноп
всё равно костыльно как то... в свитче меняли бы свойство и всё... или вы думаете что долгий свитч это не красиво и не профессионально, я видел в приличном приложении свит на сотни строк... а что ж поделаешь если по другому никак.
R.id.team
Политика на форуме запрещена
Политика на форуме запрещена
Re: Простой вопрос - один обработчик клика на несколько кноп
ну, представь, куча кнопок, обозначающих, к примеру, цвета. По нажатию на кнопку будет меняться цвет фона. И что, писать обработку каждой?
R.id.team
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
Re: Простой вопрос - один обработчик клика на несколько кноп
а как вы идентифицируете нажатия кнопки А Б и В и т.д. ... конечно придётся писать для каждой, если они одной строкой даже отличаются
R.id.team
Политика на форуме запрещена
Политика на форуме запрещена
Re: Простой вопрос - один обработчик клика на несколько кноп
стойте, подождите
в обработчик же передается view? А через него я могу любое свойство кнопки посмотреть - название,например, цвет ее поверхности или очень удобная штука - тэг. Вот в него я и напишу что мне нужно. Это ж простая строчка.
Впрочем, я уже сделала, повесив один обрабочик на каждую, но это не то. Я хочу и на каждую не вешать. Можно через свойство кнопки - онклик, но у меня проблема - эти кнопки в диалоге находятся, там активити нету, придется с бубном танцевать, а меня это пока не устраивает. Так проще.
Потом подумаю.
в обработчик же передается view? А через него я могу любое свойство кнопки посмотреть - название,например, цвет ее поверхности или очень удобная штука - тэг. Вот в него я и напишу что мне нужно. Это ж простая строчка.
Впрочем, я уже сделала, повесив один обрабочик на каждую, но это не то. Я хочу и на каждую не вешать. Можно через свойство кнопки - онклик, но у меня проблема - эти кнопки в диалоге находятся, там активити нету, придется с бубном танцевать, а меня это пока не устраивает. Так проще.
Потом подумаю.
R.id.team
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
Re: Простой вопрос - один обработчик клика на несколько кноп
ну пробуйте кастить вью и менять в ней свойство, но опять таки один оброботчик не выйдет на все кнопки
R.id.team
Политика на форуме запрещена
Политика на форуме запрещена
Re: Простой вопрос - один обработчик клика на несколько кноп
да нет, обработчик onClick я УЖЕ написала один на все, все работает..
не получается просто его , как бы объяснить, одним оператором установить сразу на все.
Грубо говоря, мне хотелось бы заменить это
Каким-то ХОТЯ БЫ циклом.
не получается просто его , как бы объяснить, одним оператором установить сразу на все.
Грубо говоря, мне хотелось бы заменить это
Код: Выделить всё
ImageButton btn0 = (ImageButton) v.findViewById(R.id.btn0);
ImageButton btn1 = (ImageButton) v.findViewById(R.id.btn1);
ImageButton btn2 = (ImageButton) v.findViewById(R.id.btn2);
***
btn0.setOnClickListener(this.onClick);
btn1.setOnClickListener(this.onClick);
btn2.setOnClickListener(this.onClick);
***
R.id.team
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
Re: Простой вопрос - один обработчик клика на несколько кноп
http://habrahabr.ru/post/116945/Olivka писал(а):да нет, обработчик onClick я УЖЕ написала один на все, все работает..
не получается просто его , как бы объяснить, одним оператором установить сразу на все.
Грубо говоря, мне хотелось бы заменить этоКаким-то ХОТЯ БЫ циклом.Код: Выделить всё
ImageButton btn0 = (ImageButton) v.findViewById(R.id.btn0); ImageButton btn1 = (ImageButton) v.findViewById(R.id.btn1); ImageButton btn2 = (ImageButton) v.findViewById(R.id.btn2); *** btn0.setOnClickListener(this.onClick); btn1.setOnClickListener(this.onClick); btn2.setOnClickListener(this.onClick); ***
CEO of a company R.id.team
Re: Простой вопрос - один обработчик клика на несколько кноп
не вижу смысла в использовании Guice:
1) на изучение нужно потратить время (не много но всё таки придётся, в итоги зачем?);
2) код уменьшится но увеличится время что бы понять код;
3) возможны вы и будете понимать код, а другой разработчик уже нет;
4) проект должен быть огромен что бы всё таки прибегать к таким действиям;
5) тоскание за собой дополнительной либы;
З.Ы. и на счёт быстродействия не вникал, но не думаю что с ней быстрее работать чем на прямую инициализировать объект.
1) на изучение нужно потратить время (не много но всё таки придётся, в итоги зачем?);
2) код уменьшится но увеличится время что бы понять код;
3) возможны вы и будете понимать код, а другой разработчик уже нет;
4) проект должен быть огромен что бы всё таки прибегать к таким действиям;
5) тоскание за собой дополнительной либы;
З.Ы. и на счёт быстродействия не вникал, но не думаю что с ней быстрее работать чем на прямую инициализировать объект.
R.id.team
Политика на форуме запрещена
Политика на форуме запрещена
Re: Простой вопрос - один обработчик клика на несколько кноп
Olivka, раз уж так принципиально, то вот велосипед =)
Редактор кода покорячил мой код, ] означает квадратные скобки.
З.Ы. только инициализируйте кнопки =)
Код: Выделить всё
private int[] color = {Color.Red, Color. Blue, Color.Yellow, Color.Green};
private Button[] btnAll = {R.id.btn1, R.id.btn2, R.id.btn3, R.id.btn4};
//....
public void onClick(View view) {
for(int i = 0; i < 4; i++) {
if(btnAll[i] == view.getId())
btnAll[i].setColorText(color[i]);
}
}
З.Ы. только инициализируйте кнопки =)
R.id.team
Политика на форуме запрещена
Политика на форуме запрещена
Re: Простой вопрос - один обработчик клика на несколько кноп
Все layout-ы (контейнеры) в которые помещены кнопки наследуются от класса ViewGroup. У него есть методы с помощью которых можно получить доступ ко всем View находящихся внутри layuot по индексу, а значит можно организовать их перебор в цикле.Olivka писал(а):да нет, обработчик onClick я УЖЕ написала один на все, все работает..
не получается просто его , как бы объяснить, одним оператором установить сразу на все.
Грубо говоря, мне хотелось бы заменить этоКаким-то ХОТЯ БЫ циклом.Код: Выделить всё
ImageButton btn0 = (ImageButton) v.findViewById(R.id.btn0); ImageButton btn1 = (ImageButton) v.findViewById(R.id.btn1); ImageButton btn2 = (ImageButton) v.findViewById(R.id.btn2); *** btn0.setOnClickListener(this.onClick); btn1.setOnClickListener(this.onClick); btn2.setOnClickListener(this.onClick); ***
Код: Выделить всё
for (int i = 0; i < layout.getChildCount(); i++) {
View v= layout.getChildAt(i);
if (v instanceof ImageButton){
((ImageButton)v).setOnClickListener(this);
}
}
Re: Простой вопрос - один обработчик клика на несколько кноп
AndreyI, а если мне не все ImageButton нужно перебирать? Мне нужен какой-то признак, чтоб перебирать не все. А то у меня десяток таких, и парочка других, под которых свои обработчики.
rezak90, ну почему велосипед.. только я не пойму, это что - онклик к любому компоненту привяжется?
Я немного не то хотела, а как в примере выше - привязывать один онклик к разным кнопкам.
rezak90, ну почему велосипед.. только я не пойму, это что - онклик к любому компоненту привяжется?
Я немного не то хотела, а как в примере выше - привязывать один онклик к разным кнопкам.
R.id.team
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
Re: Простой вопрос - один обработчик клика на несколько кноп
rezak90, ну почему велосипед.. только я не пойму, это что - онклик к любому компоненту привяжется?
Я немного не то хотела, а как в примере выше - привязывать один онклик к разным кнопкам.
Код: Выделить всё
public MainActivity extends Activity implements OnClickListener{
//при инициализации
btn1.setOnClickListener(this);
btn2.setOnClickListener(this);
//и т.д.
public void onClick(View view) {
//вот вам один обработчик на все кнопки
}
}
Код: Выделить всё
private OnClickListener listener = new View.OnClickListener() {
public void onClick(View view) {
//вот вам второй вариант
}
}
//при инициализации
btn1.setOnClickListener(listener);
btn2.setOnClickListener(listener);
//и т.д.
R.id.team
Политика на форуме запрещена
Политика на форуме запрещена
Re: Простой вопрос - один обработчик клика на несколько кноп
Olivka писал(а):да нет, обработчик onClick я УЖЕ написала один на все, все работает..
не получается просто его , как бы объяснить, одним оператором установить сразу на все.
Грубо говоря, мне хотелось бы заменить этоКаким-то ХОТЯ БЫ циклом.Код: Выделить всё
ImageButton btn0 = (ImageButton) v.findViewById(R.id.btn0); ImageButton btn1 = (ImageButton) v.findViewById(R.id.btn1); ImageButton btn2 = (ImageButton) v.findViewById(R.id.btn2); *** btn0.setOnClickListener(this.onClick); btn1.setOnClickListener(this.onClick); btn2.setOnClickListener(this.onClick); ***
Код: Выделить всё
private Resources mRes; // Ресурсы приложени
private String[] idOfButtons; // заполняем айдишниками кнопок
...
...
for (int position = 0; position < idOfButtons.length(); position++) {
Integer btnId = mRes.getIdentifier(idOfButtons[position], "id", mContext.getPackageName());
ImageButton btn = (ImageButton) v.findViewById(btnId);
btn.setOnClickListener(this.onClick);
}
Re: Простой вопрос - один обработчик клика на несколько кноп
brucemax, вот на этой строчке
ImageButton btn = (ImageButton) v.findViewById(btnId);
выдает nullpoinerexception
в переменной btnId там 0 записался.
Разве функция findViewById(btnId); может по целым числам искать?
Если беру вторую кнопку, то тоже btnId у нее нолик.
ВОт текст.
Контексты у меня такие, т.к. это у меня FragmentDialog
ImageButton btn = (ImageButton) v.findViewById(btnId);
выдает nullpoinerexception
в переменной btnId там 0 записался.
Разве функция findViewById(btnId); может по целым числам искать?
Если беру вторую кнопку, то тоже btnId у нее нолик.
ВОт текст.
Код: Выделить всё
Context mContext = getActivity().getBaseContext() ;
mRes = mContext.getResources();
String[] idOfButtons={"R.id.btn0","R.id.btn1", "R.id.btn2", "R.id.btn3", "R.id.btn4"};
for (int position = 0; position < idOfButtons.length; position++) {
Integer btnId = mRes.getIdentifier(idOfButtons[position], "id", ( getActivity()).getBaseContext().getPackageName());
ImageButton btn = (ImageButton) v.findViewById(btnId);
btn.setOnClickListener(this.onClick);
}
R.id.team
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
Re: Простой вопрос - один обработчик клика на несколько кноп
Всё верно, всё сходиться=) Извини, что до конца не разжевал. Просто функция не нашла такой ресурс, а всё потому, что ты массив неправильно заполнила.. R.id. убери.. То есть вот так будет:Olivka писал(а):brucemax, вот на этой строчке
ImageButton btn = (ImageButton) v.findViewById(btnId);
выдает nullpoinerexception
в переменной btnId там 0 записался.
Код: Выделить всё
String[] idOfButtons={"btn0","btn1", "btn2", "btn3", "btn4"};
А по чём она по-твойму ищет?) Так айдишник это же и есть целое число.Разве функция findViewById(btnId); может по целым числам искать?
Re: Простой вопрос - один обработчик клика на несколько кноп
Ура, получилось!
Спасибо, что теперь разжевал и в рот положил
Супер теперь, мне нравится!
Спасибо, что теперь разжевал и в рот положил
Супер теперь, мне нравится!
R.id.team
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
Re: Простой вопрос - один обработчик клика на несколько кноп
Я не меньше тебя рад, что тебе это помогло! Не думал, что моей квалификации уже хватает для подобной помощи)) Моя планка поднялась.. Отныне я не считаю себя чайником !Olivka писал(а):Ура, получилось!
Спасибо, что теперь разжевал и в рот положил
Супер теперь, мне нравится!