co oznacza i dlaczego stosowana jest dodatkowa litera w nazwie zmiennej (tutaj 'm') np.
private Button mTrueButton;
Przedrostek "m" to zaszłość po notacji węgierskiej. Zależy od standardów w projekcie czy jest stosowana czy nie. W Androidzie trochę się to przyjęło, bo jest używane w AOSP. Niemniej nie ma ona żadnej wartości dzisiaj przy wsparciu ze strony IDE i narzędzi do recenzji kodu.
oraz dlaczego tworzona jest tutaj anonimowa klasa wewnętrzna? Rozumiem, że tworzy ona nową klasę bez nazwy i obiekt ale po co / dlaczego...?
mFalseButton = (Button) findViewById(R.id.false_button);
mFalseButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
}
});
W sumie to sam sobie odpowiedziałeś. Tworzysz obiekt, który będzie reagował na kliknięcia w przycisk mFalseButton
. Czemu tak? Bo jeżeli nie ma żadnej skomplikowanej logiki dla kliknięcia (i z reguły w samym kliknięciu nie powinno), to można od razu przekazać prosty obiekt, który zrobi co chcemy, bez potrzeby tworzenia osobnej klasy. Może pytasz dlatego, że jesteś przyzwyczajony do, że Activity
czy Fragment
implementują View.OnClickListener
.
public class MyActivity extends Activity implements View.OnClickListener {
void onCreate(@Nullable Bundle inState) {
super.onCreate(inState);
Button falseButton = findViewById(R.id.false_button);
falseButton.setOnClickListener(this);
}
@Override
public void onClick(View view) {
// Do something
}
}
Jest to raczej antywzorzec, bo robisz ze swojego Activity
klasę, która powoli zaczyna odpowiadać za wszystko. Dodatkowo przestaje to być czytelne, gdy masz kilka przycisków, które muszą być obsłużone w różny sposób. Jeżeli pytasz dlatego, że wcześniej ustawiałeś to przez XML android:onClick=handleOnClick
, to od razu mówię, że tak w ogóle nie powinieneś robić, bo jest to chyba najgorszy możliwy sposób - na dłuższą metę jest to bardzo nieczytelne, nieodporne na zmiany i relatywnie powolne w porównaniu do innych sposobów.