2012-11-21 17 views
21

o OnClick İşleyici'yi tutmak için ikincil bir sınıf yapmak mümkün mü? Etkinlik sınıfında yaratılmayan anlamı nedir?Android - OnClick Dinleyici ayrı sınıfta

Ben sadece ana faaliyet sınıfında OnClick dinleyicileri koyarak sadece dağınık olduğunu bulup doğrusu ayrı sınıflara onları olurdu. Teşekkür

+0

Bu http://stackoverflow.com/questions/13478526/android-button-navagation-with-onclick-listeners/13478749#13478749 – Ronnie

+0

Daha önce bunu yaptım, ama aradığım şey bu değil. Teşekkürler – Pztar

+0

@Pztar userSeven7s'nin linki sorunuza cevap vermelidir. Aksi halde, lütfen sorunuza açıklık getirin. –

cevap

27

Tabii, bu mümkün. Sadece View.OnClickListener'u uygulayan bir sınıf oluşturun ve bunu View'a dinleyici olarak ayarlayın. Örneğin:

public class ExternalOnClickListener implements View.OnClickListener { 

    public ExternalOnClickListener(...) { 
     // keep references for your onClick logic 
    } 

    @Override public void onClick(View v) { 
     // TODO: add code here 
    } 

} 

Ve sonra dinleyici olarak yukarıdaki sınıfının bir örneğini ayarlayın:

view.setOnClickListener(new ExternalOnClickListener(...)); 

parametreli kurucu isteğe bağlıdır, ancak gerçekte yapmak yoluyla bir şeyler geçmeniz gerekir çok olasıdır senin onClick(...) mantık üzerinde çalışır. anonim bir sınıf uygulanması

olsa çalışmak genellikle daha kolaydır. Sadece bir düşünce.

+0

Teşekkürler, ihtiyacım olan buydu. Bununla başladım ama kurucuyu tamamen unuttum. – Pztar

+0

Harika cevap, teşekkürler –

+0

Sınıfı bir iç sınıf olarak kullanırsanız, bu sınıfı ** statik ** – Tobrun

1

Yapabilirsin. Ancak, yalnızca tüm görüşler de dahil olmak üzere, özniteliklere ne bir aktivite referansı olmayacağını düşünün. (bunları kamuya açık hale getirmedikçe veya getters yöntemleriyle erişilebilir olmadıkça). onlar geri dinleyici hafızasını girmesini çöp toplayıcı önlemek olabileceğinden

Ayrıca, dinleyici üzerinde aktiviteye referanslar veya herhangi üyelerini depolamak ekstra dikkatli olun.

+0

Bir Bağlam ve bir tıklatılmış görünüm referansınız olacak ...(Görünüm yöntemi, getContext() öğesini destekler – Tobrun

10

onCLicklistener'u ayrı bir sınıfa yerleştirmek yerine, neden onCreate() dışında onClickListener tanımlamayı denemiyorsunuz? örneğin İçin

: onCreate Dışında bu

onCreate()

yourViewName.setOnClicklistener(listener): 

(gibi) Evet yapabilirsiniz

private OnClickListener listener = new OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 

     } 
    }; 
+7

Söylemeye çalıştığınız şeyi anlıyorum, bunu nasıl yapacağımı biliyorum. Ama bu aradığım şey değil. Ana faaliyette bunu istemiyorum. – Pztar

+0

'a teşekkürler. Çünkü bunu çok yaparsanız, MainActivity çok uzun ve okunması zorlaşır. Farklı bir sınıfa bölerek, MainActivity'in uzunluğu daha kısa olabilir. – hexicle

5

. Bununla birlikte, dinleyiciyi bir iç sınıf haline getirmenin bir avantajı vardır - bu, etkinlik sınıfınızın alanlarına ve değişkenlerine doğrudan erişebilir. Eğer ayrı bir sınıf yapmak ve dinleyici aslında 5 görünümlere erişmek için gerekirse, lütfen dinleyici yapıcı şöyle olabilir: çok tür hantal olduğunu

MyListener listener = new MyListener(context, button, textView1, textView2, ratingBar, imageView);

. Dinleyiciniz basitse, devam edin ve ayrı bir ders yapın. Aksi takdirde, okunabilirlik için size kalmış.

İlgili konular