Wpis z mikrobloga

#android #androiddev #java
Dobra panowie java zaczyna przyprawiać mnie o bóle głowy, kto mi powie czemu mi wywala taki błąd:

java.lang.IllegalStateException: Could not find a method Switch_ON(View) in the activity class android.app.Application for onClick handler on view class android.widget.Button with id 'ON_button'
W xmlu mam android:onclick="SwitchON" w klasie MainActivity normalnie mam zaznaczone na żółto funkcje SwitchON iż coś się do niej odwołuje a tu takie kwiatki.
  • 16
@Mithrindil:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Thread receiver = new Thread(new Receiver());//ten wątek jest już zaczynany tutaj bo inaczej by wywaliło błąd że został wcześniej uruchomiony
if(!receiver.isAlive())
{
try {
receiver.start();
}catch(Exception RuntimeException){}
}

}
@donsalamanca: OK przyznaję że nie robiłem tego nigdy w ten sposób. Dlaczego koniecznie chcesz ustawiać nazwę metody w XMLu? Generalnie to nie jest zbyt dobra praktyka bo 1) powoduje problemy jakich doświadczasz 2) działa przez refleksję więc jest wolniejsza 3) bardziej związuje XML z kodem (a to nie jest dobra praktyka w przypadku gdy chcesz reużywać kod / widoki). Wg mnie lepiej stosować sprawdzone wzorce niż szukać przyczyny czemu to nie
metoda to SwitchON a onClick to Switch_ON - literowka, generalnie jak uzywasz w taki sposob i uzywasz Android Studio, to po najechaniu na zaroweczke masz opcje, zeby Ci stworzylo ta metode, wtedy unikniesz tego typu problemow
@donsalamanca: nic nie pisałem o onCreate ( ͡° ͜ʖ ͡°) skoro lista tworzona jest dynamicznie to masz do niej jakiś adapter. I ten adapter ma metodę getView(). I w tej metodzie getView tworzysz poszczególne wiersze listy i możesz dostać się do każdej kontrolki na wierszu i tam ustawić listenera.
zrob onClickListenera w adapterze... jesli to jest jeden item listy, to raczej Ci onClick="" nie zadziala, bo ta metoda musi byc ustawiona w Activity.
@Mithrindil:

Generalnie to nie jest zbyt dobra praktyka bo ..


To zalezy, wyobraz sobie, ze masz kilka fragmentow w jakiejs activity, i buttony w tych fragmentach maja ustawione onClick na te sama metode. W Activity mozesz rozroznic fragment, po samym kliknieciu, bo View odpowiada buttonowi ktory wywolal ta metode i jest w niej przekazywany jako argument. Wiec czasem to sie przydaje.
@rex1313: i tak i nie. Ja podchodzę raczej do tego tak że jeżeli mam na ekranie kilka fragmentów z przyciskami które robią to samo to jest to błąd w UX - no bo po co. Chyba że mówisz o fragmentach które nie są wyświetlane jednocześnie - wtedy OK.