Урок 10. Оптимизируем реализацию обработчиков.
Re: Урок 10. Оптимизируем реализацию обработчиков.
YAndrei,
для кнопок можно легко и непринуждённо делать onClick автоматизированный, тем более АС умеет вставлять его прямо из файла разметки.
Ну а .setOnClickListener можно цеплять к любой view. Хоть к текстовому полю, хоть к кнопке, хоть к картинке.
Вам, как будущему разработчику, необходимо чётко понимать, и уметь применять, методику работы именно .setOnClickListener, потому что с onClick и так всё понятно
для кнопок можно легко и непринуждённо делать onClick автоматизированный, тем более АС умеет вставлять его прямо из файла разметки.
Ну а .setOnClickListener можно цеплять к любой view. Хоть к текстовому полю, хоть к кнопке, хоть к картинке.
Вам, как будущему разработчику, необходимо чётко понимать, и уметь применять, методику работы именно .setOnClickListener, потому что с onClick и так всё понятно
Re: Урок 10. Оптимизируем реализацию обработчиков.
doter.ua писал(а):[quote="YAndrei"или же есть какой другой способ, так как все это кажется громоздким.
Подскажите пожалуйста как будет выглядеть наиболее правильный вариант.
Код: Выделить всё
свич(вью.ид){
case бтн1:
myMethod1();
break;
case бтн2:
myMethod2();
break;
}
Большое спасибо за ответ
Re: Урок 10. Оптимизируем реализацию обработчиков.
Если что, у кого "ругается" (во втором методе обработки кнопок) на строчку :
public class MainActivity extends Activity implements OnClickListener
после добавления implements OnClickListener , то я решила эту проблему так:
1. Навела курсор на OnClickListener и нажала ALt+Enter -> Выбрать Implement methods
2. Появится такое окошко (нажать ОК)
Внизу делается метод onClick (С которым мы и работаем)
PS: Я просто сома из урока не поняла как это сделать (не могу сказать в чем причина ,но либо урок так построен что не понять либо просто человеку не связанному с программированием тяжело во всем сразу разобраться), а когда сама потыкалась , то все поняла. Вдруг кому поможет мой коммент. Сама если что ищу ответы на форуме.
public class MainActivity extends Activity implements OnClickListener
после добавления implements OnClickListener , то я решила эту проблему так:
1. Навела курсор на OnClickListener и нажала ALt+Enter -> Выбрать Implement methods
2. Появится такое окошко (нажать ОК)
Внизу делается метод onClick (С которым мы и работаем)
PS: Я просто сома из урока не поняла как это сделать (не могу сказать в чем причина ,но либо урок так построен что не понять либо просто человеку не связанному с программированием тяжело во всем сразу разобраться), а когда сама потыкалась , то все поняла. Вдруг кому поможет мой коммент. Сама если что ищу ответы на форуме.
Re: Урок 10. Оптимизируем реализацию обработчиков.
Здравствуйте! У меня следующая ситуация: на предпросмотре в Design текст и кнопки отображаются нормально(текст вверху, кнопки ниже), при тестировании на реальном устройстве или эмуляторе текста не видно. Решаю проблему при помощи сдвига всех view элементов вниз. После этого все работает, но получается, что Design в xml файле и реальное устройство (или эмулятор) видят xml по-разному, с чем это может быть связано? Спасибо!
-
- Сообщения: 9
- Зарегистрирован: 16 дек 2015, 13:13
Re: Урок 10. Оптимизируем реализацию обработчиков.
в обработчике событий
почему нельзя вместо case R.id.btnOk: использовать case btnOk.getId(): ? они ведь возвращают одно и тоже значение - ID элемента
Код: Выделить всё
public void onClick(View v) {
switch (v.getId()) {
case R.id.btnOk:
tvOut.setText("Нажата кнопка ОК");
break;
case R.id.btnCancel:
tvOut.setText("Нажата кнопка Cancel");
break;
}
}
Re: Урок 10. Оптимизируем реализацию обработчиков.
почему у меня два урока стали не подсвечены жирным и их нет в списке для запуска, вчера все работало
- Вложения
-
- урок10.PNG (68.19 КБ) 18395 просмотров
Re: Урок 10. Оптимизируем реализацию обработчиков.
удалил уроки, создал уроки снова все работает, не понятно, что было
Re: Урок 10. Оптимизируем реализацию обработчиков.
Привет!
Урок 10 - скопировал xml-содержимое экрана и вижу в MainActivity.java
в строке setContentView(R.layout.activity_main);
символ R подсвечен красным. Если запустить проект, то все ок, после запуска эта подсветка пропадает (наверное создается этот класс R)
А как устранить эту ошибку до запуска отладки? В AS 1.5.1 горячие клавиши типа <Ctrl>+<S> или <Ctrl>+<Shift>+<S> не работают
Щелкаю по "лампочке" - предлагается несколько вариантов, какой из них нужно выбрать?
Урок 10 - скопировал xml-содержимое экрана и вижу в MainActivity.java
в строке setContentView(R.layout.activity_main);
символ R подсвечен красным. Если запустить проект, то все ок, после запуска эта подсветка пропадает (наверное создается этот класс R)
А как устранить эту ошибку до запуска отладки? В AS 1.5.1 горячие клавиши типа <Ctrl>+<S> или <Ctrl>+<Shift>+<S> не работают
Щелкаю по "лампочке" - предлагается несколько вариантов, какой из них нужно выбрать?
Re: Урок 10. Оптимизируем реализацию обработчиков.
Хоть убей не могу понять, почему требуется скобка. Ведь их везде хватает. И почему неизвестен chb1, ведь его выше объявили.
И еще проблема, в этом коде рандомным образом подсвечивается (View v), не могу понять логики. Создаю несколько раз один проект с одним кодом (вставляю из буфера), то подсвечивается, то нет (второй скрин). При этом предыдушей ошибки нет, но всё равно приложение не запустить.
И еще проблема, в этом коде рандомным образом подсвечивается (View v), не могу понять логики. Создаю несколько раз один проект с одним кодом (вставляю из буфера), то подсвечивается, то нет (второй скрин). При этом предыдушей ошибки нет, но всё равно приложение не запустить.
Re: Урок 10. Оптимизируем реализацию обработчиков.
Simmer писал(а):Хоть убей не могу понять, почему требуется скобка. Ведь их везде хватает. И почему неизвестен chb1, ведь его выше объявили.
И еще проблема, в этом коде рандомным образом подсвечивается (View v), не могу понять логики. Создаю несколько раз один проект с одним кодом (вставляю из буфера), то подсвечивается, то нет (второй скрин). При этом предыдушей ошибки нет, но всё равно приложение не запустить.
добавь имплементацию обработчика в класс. У Вас не законченый метод - потому и скобку требует перед вторым. chb1 лучше сделать отдельным полем а не локальной переменной метода.
Re: Урок 10. Оптимизируем реализацию обработчиков.
ДД
не могу понять, почему студия ругается на 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]
как это исправить?
не могу понять, почему студия ругается на 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]
как это исправить?
Re: Урок 10. Оптимизируем реализацию обработчиков.
Добрый день! Не могли бы вы подытожить какой способ обработки является наиболее правильным в небольших приложениях?
Re: Урок 10. Оптимизируем реализацию обработчиков.
Как по мне лучше сделать следующим образом:
Мне кажется, что так мы значительно сокращаем количество кода
Код: Выделить всё
OnClickListener onBtnClick = new OnClickListener() {
@Override
public void onClick(View v) {
Button b = (Button) v;
tvOut.setText(b.getText() + " was pressed");
}
};
-
- Сообщения: 1
- Зарегистрирован: 16 апр 2018, 16:46
Re: Урок 10. Оптимизируем реализацию обработчиков.
Всем добрый день, можете подсказать, в чем ошибка?
- Вложения
-
- Безымянный1.png (35.13 КБ) 14740 просмотров
- DOOMer
- Сообщения: 18
- Зарегистрирован: 12 май 2017, 16:15
- Откуда: RU.MO.Balashikha
- Контактная информация:
Re: Урок 10. Оптимизируем реализацию обработчиков.
Заменить switch на конструкцию из if-else.
Вертексы должны образовывать конвексный браш...
QNotez - простое и быстрое приложение для создания заметок
QNotez - простое и быстрое приложение для создания заметок
Re: Урок 10. Оптимизируем реализацию обработчиков.
Господа, кто скажет, что означает сообщение при запуске:
onclickActivity has stopped
onclickActivity has stopped
Re: Урок 10. Оптимизируем реализацию обработчиков.
Рабочий код 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");
}
}
//--
}
//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");
}
}
//--
}
Re: Урок 10. Оптимизируем реализацию обработчиков.
вопрос :
почему не компилирует если в методе onCreate создана такая строка:
btnOk.setOnClickListener(this) //указатель this подчеркнут красным
при компиляции указывает ошибку что MainActivity не может быть быть приведено к типу OnClickListener
получается что класс слушатель не является потомком класса активити??
!!! эту ошибку убрал: btnOk.setOnClickListener((OnClickListener) this) //нужно согласовывать типы
почему не компилирует если в методе onCreate создана такая строка:
btnOk.setOnClickListener(this) //указатель this подчеркнут красным
при компиляции указывает ошибку что MainActivity не может быть быть приведено к типу OnClickListener
получается что класс слушатель не является потомком класса активити??
!!! эту ошибку убрал: btnOk.setOnClickListener((OnClickListener) this) //нужно согласовывать типы