2012-01-16 3 views
2

У меня с некоторыми действительно странными проблемами с моей кнопкой мыши на Android-клиенте! Я уже делал это несколько раз, я схожу с ума, не найдя решение (ни логическое объяснение) для этой ошибки.Click Listener в Android-кнопке не работает

ошибка Обработчик события для 2 кнопок в моей деятельности не выполняется. Нет ошибки, это просто не производительность обработчика во время выполнения. Это код для одной из кнопок:

btnNext = (Button) findViewById(R.listclient.btnnext); 
btnNext.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View arg0) { 
      Toast.makeText(MyActivityClassName.this, "Flag 01", 1).show(); 
          btnNext.setText("CLICKED!"); 
     } 
    }); 

И это кнопка на макете XML:

<Button android:id="@+listclient/btnnext" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:clickable="true" 
      style="@style/Widget.TextViewInfo" 
      android:text="Next" 
      /> 

Информация

  • Существует также ImageButton внутри этой деятельности, этот образButton отлично работает с внутренним классом OnClickListener (точно так же, как этот).
  • Я уже пытался сделать свой класс активности наследованием OnClickListener и установить его как кнопку для прослушивания кнопки без успеха.
  • Я также создал класс внутри моего класса Activity и задал его как кнопку для прослушивания кнопок, и не имел успеха.

Я компиляции для Android 2.1 + Google API (SDK 7)

------------ ------------- EDITED ----

Если я кладу в мой код:

btnNext.performClick(); 

Это выполнено! Я сейчас даже сумасшедший! И кнопка на самом деле нажата, когда я касаюсь ее, я вижу кнопку «анимация», а клик регистрируется в LogCat.

ответ

8

Вы не можете использовать listclient при указании или при использовании идентификатора. Первая часть - это тип ресурса, который должен быть id в вашем случае.

Изменить android:id="@+listclient/btnnext"android:id="@+id/btnnext". Также настроить свой код:

btnNext = (Button) findViewById(R.id.btnnext); 
+0

Мое приложение действительно большое (около 50 видов деятельности), во многих случаях мы используем одно и то же имя кнопки в разных действиях. Чтобы предотвратить действительно большое количество ссылок виджетов с «id /», мы используем имя макета для разделения виджетов. Например, у меня есть «btnext» в других 2 макетах. Но я попробовал ваше предложение, оно все еще не работает. – IPValverde

+2

Два решения: a) Либо префикс их по-другому, как 'android: id =" @ + id/listclient_btnnext "' (и затем использовать код R.id.listclient_bttnnext). Или б) Не заботьтесь и не используйте их повторно. 'findViewById()' выполняет поиск только в текущем виде hierachy (= видимый макет). Поэтому, если у вас есть 3 мероприятия с 3 различными макетами, это не имеет значения. Он найдет тот, который соответствует активной компоновке. (Вот почему 'findViewById()' всегда возвращает 'null', если вы вызываете его перед' setContentView() '. Пока нет представления hierachy) – user287351

+0

Хммм ...+1 Я не знал об этом! Я думаю, что лучше использовать id /. Но, к сожалению, это не проблема, так как изменение ссылок не вызвало вызов clickEvent. – IPValverde

0

На первый взгляд над вами код, я заметил, когда вы не вызываете findViewById правильно. Измените идентификатор вашей кнопки на «тест», затем попробуйте: findViewById(R.id.test). Имеют смысл?

Смежные вопросы