2011-08-16 21 views
6

W systemie Android wydaje się, że są 3 popularne sposoby obsługi kliknięć przycisków, jaka jest różnica między tymi metodami? Czy któreś z nich jest "lepsze" w jakiś sposób?Jak obsługiwać przycisk kliknięty w systemie Android?

Trzy sposoby Ciągle widzę to: klasa

Anonymous

Znajdź przycisk przez to ID, a następnie przekazać nowa klasa anonimowy setOnClickListener, np w onCreate

findViewById(R.id.myButton).setOnClickListener(new OnClickListener() { 
    public void onClick(View v) { 
     // .. Whatever 
    } 
}); 

Wdrożenie OnClickListener

Wdrożenie OnClickListener i przechodzą this do setOnClickListener, a następnie za pomocą konstrukcji switch na podstawie identyfikatora, na przykład przycisk w onCreate

findViewById(R.id.myButton).setOnClickListener(this); 

i wdrożenie onClick jak

public void onClick(View v) { 
    switch(v.getId()) { 
     case R.id.myButton: 
      // ... whatever ... 
      break; 
    } 
} 

Zastosowanie onClick XML atribute

w układzie XML dla swojej działalności, zamiast dać swoją przycisk identyfikator, użyj onClick tak :

<Button 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:onClick="buttonClicked" 
    android:text="Button" /> 

Następnie mają buttonClicked metodę w swojej Acitiviy takiego:

public void buttonClicked(View v) { 
    // ... whatever ... 
} 

w tej chwili mają tendencję do używania atrybut XML, ale to tylko dlatego, że wiąże się z najmniejszą ilość kodu. Kiedy powinienem skorzystać z innych metod?

+0

+1 za opisanie trzeciej metody. Uczę się tylko Androida i nie wiedziałem o atrybucie "onClick". – Mike

Odpowiedz

4

Pierwsze dwa to podejścia klasyczne. Który wolisz, jest bardziej ogólne pytanie Java niż pytanie Android. Trzeci został dodany później, aby ułatwić.

Ustawienie detektora kliknięcia na przycisku jest bardzo częstym zadaniem, ale wymaga ono sporo kodu standardowego. Jednym ze sposobów zmniejszenia liczby elementów opcjonalnych jest udostępnienie odbiorcy z jednym kliknięciem między kilkoma przyciskami . Podczas gdy technika ta zmniejsza liczbę klas, nadal wymaga ona znacznej ilości kodu i nadal wymaga podania każdego przycisku jako identyfikatora w pliku układu XML. W systemie Android 1.6 nie jest wymagane żadne z tych . Wszystko co musisz zrobić, to zadeklarować metodę publiczną w swojej działalności do obsługi kliknięcia (metoda musi mieć jeden widok argumentu)

Source

1

ja naprawdę zawsze postrzegane jako preferencjami. Nie jestem pewien, czy istnieje jakakolwiek korzyść z wydajności dla obu, niż dwie ostatnie metody mogą być nieco szybsze, ponieważ nie tworzą obiektów w czasie wykonywania.

Pierwsza opcja izoluje kod do pojedynczego przycisku, więc bardzo łatwo jest debugować, ponieważ wiadomo tylko, że kod zostanie wykonany po kliknięciu tego przycisku. Jednak wiele przycisków może spowodować rozszerzenie metod inicjalizacji na duże rozmiary.

Dwie ostatnie metody umieszczają obsługę wszystkich przycisków w jednym miejscu, które mogą być wygodne i czyściutkie, ale z wieloma przyciskami musisz odcyfrować, który przycisk został naciśnięty przez użytkownika za pomocą metody v.getId().

Ostatnia opcja pozwala łatwo określić konkretne metody dla poszczególnych przycisków, dzięki czemu można je oddzielić, ale znowu będziesz miał wiele metod używanych do pojedynczych celów.

Zawsze używałem metody śródliniowej (klasa anonimowa) dla niestandardowych okien dialogowych z przyciskami, ponieważ zachowuje kod z resztą okna dialogowego, a nie z działania lub klasy. Po prostu inicjuję przyciski niestandardowego okna dialogowego, kiedy zastępuję onCreateDialog.

Wdrażam OnClickListener w działaniu, jeśli przyciski znajdują się w głównym oknie.

Powiązane problemy