Урок 10. Оптимизируем реализацию обработчиков.

Обсуждение уроков
Аватара пользователя
An-droid
Сообщения: 51
Зарегистрирован: 25 авг 2015, 10:54

Re: Урок 10. Оптимизируем реализацию обработчиков.

Сообщение An-droid » 10 сен 2015, 21:15

YAndrei,
для кнопок можно легко и непринуждённо делать onClick автоматизированный, тем более АС умеет вставлять его прямо из файла разметки.

Ну а .setOnClickListener можно цеплять к любой view. Хоть к текстовому полю, хоть к кнопке, хоть к картинке.
Вам, как будущему разработчику, необходимо чётко понимать, и уметь применять, методику работы именно .setOnClickListener, потому что с onClick и так всё понятно :)
Изображение

YAndrei
Сообщения: 2
Зарегистрирован: 10 сен 2015, 20:08

Re: Урок 10. Оптимизируем реализацию обработчиков.

Сообщение YAndrei » 10 сен 2015, 21:28

doter.ua писал(а):[quote="YAndrei"или же есть какой другой способ, так как все это кажется громоздким.
Подскажите пожалуйста как будет выглядеть наиболее правильный вариант.

Код: Выделить всё

свич(вью.ид){
   case бтн1:
      myMethod1();  
      break;
   case бтн2:
      myMethod2();  
      break;
}

[/quote]
Большое спасибо за ответ

Darja
Сообщения: 4
Зарегистрирован: 20 окт 2015, 15:54

Re: Урок 10. Оптимизируем реализацию обработчиков.

Сообщение Darja » 11 ноя 2015, 14:56

Если что, у кого "ругается" (во втором методе обработки кнопок) на строчку :
public class MainActivity extends Activity implements OnClickListener
после добавления implements OnClickListener , то я решила эту проблему так:
1. Навела курсор на OnClickListener и нажала ALt+Enter -> Выбрать Implement methods
Изображение
2. Появится такое окошко (нажать ОК)
Изображение
Внизу делается метод onClick (С которым мы и работаем)

PS: Я просто сома из урока не поняла как это сделать (не могу сказать в чем причина ,но либо урок так построен что не понять либо просто человеку не связанному с программированием тяжело во всем сразу разобраться), а когда сама потыкалась , то все поняла. Вдруг кому поможет мой коммент. Сама если что ищу ответы на форуме. :D

Suntey
Сообщения: 3
Зарегистрирован: 18 ноя 2015, 15:43

Re: Урок 10. Оптимизируем реализацию обработчиков.

Сообщение Suntey » 27 ноя 2015, 00:34

Здравствуйте! У меня следующая ситуация: на предпросмотре в Design текст и кнопки отображаются нормально(текст вверху, кнопки ниже), при тестировании на реальном устройстве или эмуляторе текста не видно. Решаю проблему при помощи сдвига всех view элементов вниз. После этого все работает, но получается, что Design в xml файле и реальное устройство (или эмулятор) видят xml по-разному, с чем это может быть связано? Спасибо!

Saavinovka
Сообщения: 9
Зарегистрирован: 16 дек 2015, 13:13

Re: Урок 10. Оптимизируем реализацию обработчиков.

Сообщение Saavinovka » 20 дек 2015, 10:16

в обработчике событий

Код: Выделить всё

public void onClick(View v) {     
     switch (v.getId()) {

     case R.id.btnOk:       
       tvOut.setText("Нажата кнопка ОК");
       break;

     case R.id.btnCancel:       
       tvOut.setText("Нажата кнопка Cancel");
       break;
     }
   }
почему нельзя вместо case R.id.btnOk: использовать case btnOk.getId(): ? они ведь возвращают одно и тоже значение - ID элемента

cintakc
Сообщения: 3
Зарегистрирован: 16 янв 2016, 18:46

Re: Урок 10. Оптимизируем реализацию обработчиков.

Сообщение cintakc » 17 янв 2016, 13:02

почему у меня два урока стали не подсвечены жирным и их нет в списке для запуска, вчера все работало
Вложения
урок10.PNG
урок10.PNG (68.19 КБ) 18094 просмотра

cintakc
Сообщения: 3
Зарегистрирован: 16 янв 2016, 18:46

Re: Урок 10. Оптимизируем реализацию обработчиков.

Сообщение cintakc » 18 янв 2016, 10:59

удалил уроки, создал уроки снова все работает, не понятно, что было

Dem0
Сообщения: 7
Зарегистрирован: 02 фев 2016, 17:50

Re: Урок 10. Оптимизируем реализацию обработчиков.

Сообщение Dem0 » 08 фев 2016, 20:14

Привет!
Урок 10 - скопировал xml-содержимое экрана и вижу в MainActivity.java
в строке setContentView(R.layout.activity_main);
символ R подсвечен красным. Если запустить проект, то все ок, после запуска эта подсветка пропадает (наверное создается этот класс R)
А как устранить эту ошибку до запуска отладки? В AS 1.5.1 горячие клавиши типа <Ctrl>+<S> или <Ctrl>+<Shift>+<S> не работают
Щелкаю по "лампочке" - предлагается несколько вариантов, какой из них нужно выбрать?

Simmer
Сообщения: 4
Зарегистрирован: 13 фев 2016, 19:34

Re: Урок 10. Оптимизируем реализацию обработчиков.

Сообщение Simmer » 15 фев 2016, 07:16

Хоть убей не могу понять, почему требуется скобка. Ведь их везде хватает. И почему неизвестен chb1, ведь его выше объявили.
И еще проблема, в этом коде рандомным образом подсвечивается (View v), не могу понять логики. Создаю несколько раз один проект с одним кодом (вставляю из буфера), то подсвечивается, то нет (второй скрин). При этом предыдушей ошибки нет, но всё равно приложение не запустить.
java2.jpg
java2.jpg (52.04 КБ) 18052 просмотра
java3.jpg
java3.jpg (38.64 КБ) 18052 просмотра

mihoj
Сообщения: 2
Зарегистрирован: 22 апр 2016, 17:30

Re: Урок 10. Оптимизируем реализацию обработчиков.

Сообщение mihoj » 23 апр 2016, 12:48

Simmer писал(а):Хоть убей не могу понять, почему требуется скобка. Ведь их везде хватает. И почему неизвестен chb1, ведь его выше объявили.
И еще проблема, в этом коде рандомным образом подсвечивается (View v), не могу понять логики. Создаю несколько раз один проект с одним кодом (вставляю из буфера), то подсвечивается, то нет (второй скрин). При этом предыдушей ошибки нет, но всё равно приложение не запустить.
java2.jpg
java3.jpg

добавь имплементацию обработчика в класс. У Вас не законченый метод - потому и скобку требует перед вторым. chb1 лучше сделать отдельным полем а не локальной переменной метода.

vloaderv
Сообщения: 1
Зарегистрирован: 15 янв 2017, 14:29

Re: Урок 10. Оптимизируем реализацию обработчиков.

Сообщение vloaderv » 15 янв 2017, 14:42

ДД

не могу понять, почему студия ругается на setOnClickListener в этом уроке, а в предыдущем уроке все было в порядке

[syntax=xml]package ru.startandroid.p0101listener;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends Activity {

// описание объектов
TextView tvOut;
Button btnOk;
Button btnCancel;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

// ищем View-элементы для onCreate
tvOut = (TextView) findViewById(R.id.tvOut);
btnOk = (Button) findViewById(R.id.btnOk);
btnCancel = (Button) findViewById(R.id.btnCancel);

// создаем обработчик нажатия кнопок
View.OnClickListener oclBtn = new View.OnClickListener() {
@Override
public void onClick(View v) {
// по id определеяем кнопку, вызвавшую этот обработчик
switch (v.getId()) {
case R.id.btnOk:
// кнопка ОК
tvOut.setText("Нажата кнопка ОК");
break;
case R.id.btnCancel:
// кнопка Cancel
tvOut.setText("Нажата кнопка Cancel");
break;
}
};

// присвоим обработчик кнопкам
btnOk.setOnClickListener(oclBtn);
btnCancel.setOnClickListener(oclBtn);

}
}
[/syntax]

как это исправить?

Siz-off
Сообщения: 1
Зарегистрирован: 30 апр 2017, 14:24

Re: Урок 10. Оптимизируем реализацию обработчиков.

Сообщение Siz-off » 30 апр 2017, 14:26

Добрый день! Не могли бы вы подытожить какой способ обработки является наиболее правильным в небольших приложениях?

Giffy
Сообщения: 1
Зарегистрирован: 07 фев 2018, 15:56

Re: Урок 10. Оптимизируем реализацию обработчиков.

Сообщение Giffy » 07 фев 2018, 15:58

Как по мне лучше сделать следующим образом:

Код: Выделить всё

OnClickListener onBtnClick = new OnClickListener() {
            @Override
            public void onClick(View v) {
                Button b = (Button) v;
                tvOut.setText(b.getText() + " was pressed");
            }
        };
Мне кажется, что так мы значительно сокращаем количество кода

DimaNeroda
Сообщения: 1
Зарегистрирован: 16 апр 2018, 16:46

Re: Урок 10. Оптимизируем реализацию обработчиков.

Сообщение DimaNeroda » 16 апр 2018, 16:50

Всем добрый день, можете подсказать, в чем ошибка?
Вложения
Безымянный1.png
Безымянный1.png (35.13 КБ) 14439 просмотров

Аватара пользователя
DOOMer
Сообщения: 18
Зарегистрирован: 12 май 2017, 16:15
Откуда: RU.MO.Balashikha
Контактная информация:

Re: Урок 10. Оптимизируем реализацию обработчиков.

Сообщение DOOMer » 16 апр 2018, 18:00

Заменить switch на конструкцию из if-else.
Вертексы должны образовывать конвексный браш...

QNotez - простое и быстрое приложение для создания заметок

Али-Бабай
Сообщения: 1
Зарегистрирован: 04 июн 2019, 10:48

Re: Урок 10. Оптимизируем реализацию обработчиков.

Сообщение Али-Бабай » 04 июн 2019, 11:14

Господа, кто скажет, что означает сообщение при запуске:
onclickActivity has stopped

Eman
Сообщения: 1
Зарегистрирован: 07 авг 2020, 11:22

Re: Урок 10. Оптимизируем реализацию обработчиков.

Сообщение Eman » 07 авг 2020, 11:25

Рабочий код Android Studio 4 для P0102 (предпочтительный метод):
//MainActivity.java
package com.example.p0102activitylistener;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity implements OnClickListener{
TextView tvOut;
Button btnOk;
Button btnCancel;


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

tvOut = (TextView) findViewById(R.id.tvOut);
btnOk = (Button) findViewById(R.id.btnOk);
btnCancel = (Button) findViewById(R.id.btnCancel);

btnOk.setOnClickListener(this);
btnCancel.setOnClickListener(this);
}
//---
@Override
public void onClick(View v) {
// по id определяем кнопку, вызвавшую этот обработчик

switch (v.getId()) {
case R.id.btnOk:
// кнопка ОК
tvOut.setText("Нажата кнопка ОК");
break;
case R.id.btnCancel:
// кнопка Cancel
tvOut.setText("Нажата кнопка Cancel");
break;
default:
tvOut.setText("Unknow");
}
}
//--

}

Vuk
Сообщения: 1
Зарегистрирован: 05 авг 2021, 09:58

Re: Урок 10. Оптимизируем реализацию обработчиков.

Сообщение Vuk » 05 авг 2021, 10:05

вопрос :
почему не компилирует если в методе onCreate создана такая строка:
btnOk.setOnClickListener(this) //указатель this подчеркнут красным
при компиляции указывает ошибку что MainActivity не может быть быть приведено к типу OnClickListener
получается что класс слушатель не является потомком класса активити??

!!! эту ошибку убрал: btnOk.setOnClickListener((OnClickListener) this) //нужно согласовывать типы

Ответить