Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Android > Создание события OnClickListener


Автор: Abbath1349 7.9.2011, 18:19
Скажите почему в данном коде он ругается на  button1_click  и button2_click 
Код

package com.samples.button;

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

public class ButtonActivity extends Activity {
   private TextView mText;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        mText=(TextView)findViewById(R.id.text);
        final Button button1=(Button)findViewById(R.id.button1);
  
        final Button button2=(Button)findViewById(R.id.button2);
        
        button1.setOnClickListener(button1_click);
        button2.setOnClickListener(button2_click);

        public OnClickListener button1_click =new View.OnClickListener() {
            
            @Override
            public void onClick(View v) {
                mText.setText("Click on button01");
                
            }
        };
                
         public OnClickListener button2_click =new OnClickListener() {
                
                @Override
                public void onClick(View v) {
                    mText.setText("Click on button02");
                    
                }
            };
        
    }
}

Автор: Frees 7.9.2011, 18:56
объявление надо выше понять, угадал?

Автор: Abbath1349 7.9.2011, 19:16
Цитата(Frees @ 7.9.2011,  18:56)
объявление надо выше понять, угадал?

Всмысле? выше разместить событития? не помогает

Автор: Frees 7.9.2011, 19:35
всмысле, ты сперва объяви объект а потом используй..

Автор: Abbath1349 7.9.2011, 20:21
Цитата(Frees @ 7.9.2011,  19:35)
всмысле, ты сперва объяви объект а потом используй..

а что именно то объявлять и где? у меня в этой строчке  public OnClickListener button1_click =new View.OnClickListener() он button1_click  красным подчеркивает. Ошибка Illegal modifier for parameter button2_click; only final is permitted

Автор: toxx 7.9.2011, 21:12
Вродебы все пишет вам, если вы так хотите листенеры объявить, то нужно их сделать полями класса.Если по уму делать, то нужно отимплементироваться от view.onclicklistener

Автор: AbdulBcex 7.9.2011, 22:22
Illegal modifier - скорее всего потому, что невозможно локальную переменную как public объявить. Вероятно именно в модификаторах причина и основной ошибки.

Я, конечно, не настаиваю, но мне одному такое объявление слушателей показалось странным? Чем не нравится вариант более, на мой взгляд, общепринятый:
Код

Button b = new Button();
b.setOnClickListener(new OnClickListener(){
@Override
      public void onClick(View v) {
            mText.setText("Click on button02");                    
       }
});


Также хорошая практика - пусть ваша Активити реализует интерфейс OnClickListener, а внутри метода OnClick будете по view.id() определять кнопку и выполнять действие.

Автор: PiyodaiSiyo 7.9.2011, 23:20
да там вернее всего батоны в R классе объявлены как финальные (постоянные числа), а нужны переменные.Просто убрать вручную финалы и числа со знаком равенства.

Добавлено через 2 минуты и 48 секунд
А то чего он спрашивает онли финальные

Автор: ivanovpv 8.9.2011, 08:00
Правильно ругается, потому что сначала вы объявляете кнопку немодифицируемой (final) и тут же строчкой ниже пытаетесь модифицировать его - устанавливая ему новый листенер.

Код

Button button2=(Button)findViewById(R.id.button1); //надо убрать модификатор final и все заработает
button1.setOnClickListener(button1_click);

Автор: Abbath1349 8.9.2011, 16:29
Вообщем как я понял надо Button1_click и Button2_click объявить в классе R.java. Подскажите как это сделать я после того как пропишу их и нажму сохранить они удаляются. Я новичек просто в этом ещо.

Автор: toxx 8.9.2011, 17:13
Abbath1349
ясное дело удаляться, там вверху файла написано что он сам генерится.
Что вы никак не сделаете? я и AbdulBcex уже сказали что нужно сделать, что сложного?

Автор: Abbath1349 8.9.2011, 17:28
ну вариант AbdulBcex  я делал до этого просто в книжке Голощапова следующий пример вот таким образом для удобства представления кода.

Автор: ivanovpv 9.9.2011, 08:27
Цитата(Abbath1349 @  8.9.2011,  17:29 Найти цитируемый пост)
Вообщем как я понял надо Button1_click и Button2_click объявить в классе R.java. Подскажите как это сделать я после того как пропишу их и нажму сохранить они удаляются. Я новичек просто в этом ещо. 


R.java - нельзя модифицировать - он генерируется автоматом!  smile Прочитайте выше комментарии - ясно же написано что надо сделать!

Автор: spyswamp 9.9.2011, 17:27
ПАЦАНЫ, Я СЕГОДНЯ ШЁЛ КОРОЧЕ ПО РЫНКУ И УВИДЕЛ МУДАКА В МАЙКЕ "ГОЛОЩАПОВ", НУ Я ПОДСКОЧИЛ И РЕЗКО ПЕРЕЕБАЛ ЕМУ В ЩЩИ С ВЕРТУШКИ И ПОЯСНИЛ ЕГО КРИКОМ "НЕ ЛЮБЛЮ КРИВОРУКИХ", ПОТОМУ ЧТО Я УГОРЕЛ ПО developer.android.com, ПАЦАНЫ ДУХ СТАРОЙ ШКОЛЫ ЖИВЁТ ТОЛЬКО В ОРИГИНАЛЬНЫХ ДОКАХ, ГДЕ КОДЯТ ПО ХАРДКОРУ, ГДЕ ПАЦАНЫ ЖИВУТ ЭНЕРГИЕЙ, МОЛОДОСТЬЮ И ЕБУТ ГОЛОЩАПОВЫХ В РОТ! ТОЛЬКО СТАНДАРТ developer.android.com, ТОЛЬКО ХАРДКОР!!! ЮНИТИ УЛЬТРАХАРДКОР ДОКИ РАЗРАБОТЧИКОВ!!! пацаны ебашьте мудаков, Голощаповых, криворуких, угорайте на гугле, любите свою программу, смартфон и Гугл! ГОВОРИТЕ ОТКРЫТО И СМЕЛО ПРЯМО В ЛИЦО! developer.android.com!

Автор: Abbath1349 9.9.2011, 18:04
Вообщем разобрался я с этим там с проектом какой то глюк видать был создал по новому чуть поменял заработало )))

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)