Страница 11 из 11

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

Добавлено: 10 сен 2015, 21:15
An-droid
YAndrei,
для кнопок можно легко и непринуждённо делать onClick автоматизированный, тем более АС умеет вставлять его прямо из файла разметки.

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

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

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

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

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

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

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

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

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

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

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

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

Добавлено: 20 дек 2015, 10:16
Saavinovka
в обработчике событий

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

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 элемента

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

Добавлено: 17 янв 2016, 13:02
cintakc
почему у меня два урока стали не подсвечены жирным и их нет в списке для запуска, вчера все работало

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

Добавлено: 18 янв 2016, 10:59
cintakc
удалил уроки, создал уроки снова все работает, не понятно, что было

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

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

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

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

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

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

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

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

Добавлено: 15 янв 2017, 14:42
vloaderv
ДД

не могу понять, почему студия ругается на 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. Оптимизируем реализацию обработчиков.

Добавлено: 30 апр 2017, 14:26
Siz-off
Добрый день! Не могли бы вы подытожить какой способ обработки является наиболее правильным в небольших приложениях?

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

Добавлено: 07 фев 2018, 15:58
Giffy
Как по мне лучше сделать следующим образом:

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

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

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

Добавлено: 16 апр 2018, 16:50
DimaNeroda
Всем добрый день, можете подсказать, в чем ошибка?

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

Добавлено: 16 апр 2018, 18:00
DOOMer
Заменить switch на конструкцию из if-else.

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

Добавлено: 04 июн 2019, 11:14
Али-Бабай
Господа, кто скажет, что означает сообщение при запуске:
onclickActivity has stopped

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

Добавлено: 07 авг 2020, 11:25
Eman
Рабочий код 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");
}
}
//--

}

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

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

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